mysql基础

Mysql基础

一.Mysql四大特性

1.原子性(Atomicity )

一个事务是一个不可再分割的整体,要么全部成功,要么全部失败

事务在数据库中就是一个基本的工作单位,事务中包含的逻辑操作(SQL 语句),只有两种情况:成功和失败。事务的原子性其实指的就是这个逻辑操作过程具有原子性,不会出现有的逻辑操作成功,有的逻辑操作失败这种情况

2.一致性(Consistency )

一个事务可以让数据从一种一致状态切换到另一种一致性状态

举例说明:张三给李四转账 100 元,那么张三的余额应减少 100 元,李四的余额应增加 100 元,张三的余额减少和李四的余额增加这是两个逻辑操作具有一致性

3.隔离性(Isolution )

一个事务不受其他事务的影响,并且多个事务彼此隔离

一个事务内部的操作及使用的数据,对并发的其他事务是隔离的,并发执行的各个事务之间不会互相干扰

4.持久性(Durability )

一个事务一旦被提交,在数据库中的改变就是永久的,提交后就不能再回滚

一个事务被提交后,在数据库中的改变就是永久的,即使系统崩溃重新启动数据库数据也不会发生改变

二.脏读、幻读、不可重复读

1.脏读:

在一个事务里面,由于其他事务修改了数据并且没有提交,而导致前后两次读取的数据不一致的情况,这种事务并发问题称之为 “脏读”

有两个事务,分别是事务 A 和事务 B。在事务 A 中查询一条数据,查询结果中 score 的值是 80,然后事务 B 去修改这一条数据,将 score 的值改为 90,但是它没有提交,这时候事务 A 去查询这条数据,发现数据竟然发生了变化。

2.不可重复读

一个事务读取到其他事务已提交的数据导致前后两次读取数据不一样的情况

两个事务,事务 A 查询一条数据,事务 B 修改了这条数据,特别注意,这里事务 B 执行了提交,但是事务 A 还没有提交或回滚,这种事务并发问题称为不可重复读

3. 幻读(默认隔离级别)

一个事务前后两次读取的数据不一致,是因为其他事务插入数据导致的事务并发情况

三.事务的隔离级别

1.读未提交(READ UNCOMMIT)

READ UNCOMMIT允许某个事务看到其他事务并没有提交的数据。可能会导致脏读、不可重复读、幻影数据。

原理:READ UNCOMMIT不会采用任何锁。

2.读已提交(READ COMMIT)

READ COMMIT允许某个事务看到其他事务已经提交的数据。可能会导致不可重复读和幻影数据。

原理:数据的读是不加锁的,但是数据的写入、修改、删除加锁,避免了脏读。

3.可重复读(REPEATABLE READ)

InnoDB中REPEATABLE READ级别同一个事务的两次相同读取肯定是一样的,其他事务的提交不会对本次事务有影响。

原理:数据的读、写都会加锁,当前事务如果占据了锁,其他事务必须等待本次事务提交完成释放锁后才能对相同的数据行进行操作。

4.可串行化(SERIALIZABLE)

它将事务的执行变为顺序执行,与其他三个隔离级别相比,它就是相当于单线程,后一个事务的执行必须等待前一个事务结束才能执行。

5.总结

MySQL 的默认隔离级别是可重复读,不是读已提交;

隔离性从低到高分别是:读未提交、读已提交、可重复读、可串行化;

并发性跟隔离性恰好相反,从低到高是:可串行化、可重复读、读已提交、读未提交。隔离性越高,说明锁的粒度越细,并发性自然就会降低;

MySQL 事务有四种隔离级别,如下所示,表格中的 “是” 代表存在这个问题,“否” 代表没有这个问题。

四.Mysql数据类型

1.数值

2.日期和时间

3.字符串

posted @ 2023-07-25 11:48  常疯大虾  阅读(19)  评论(0)    收藏  举报