Mysql事务隔离级别

一、事务的基本要素ACID

1. 原子性(Atomicity):事务开始后所有操作要么全部成功,要么全部失败;事务在执行过程中出错,会回滚到事务执行之前的状态,所有操作就像没有发生。

2. 一致性(Consistengcy):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

3. 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。

4. 持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库。


二、事务的并发问题

1. 脏读:事务A读取了事务B未提交的数据,事务B回滚,那么事务A读取到了脏数据

2. 不可重复读:事务A多次读取数据不一致,在事务A两次读取中间,事务B更新了数据并提交事务,导致事务A两次读取相同数据不一致

3. 幻读:事务A在两次读取数据过程间,事务B插入了新数据,导致事务A第二次读取的数据在第一次读取中是没有的(跟产生了幻觉一样)

4. 幻读是针对插入、删除操作的,重复读、不可重复读是针对更新操作的


三、事务隔离级别

Mysql事务隔离级别_第1张图片

1. 如果事务设置为read-uncommitted,即使事务没有提交,我们也可以读取到更新后的数据,造成脏读,这是事务隔离级别最低的一种。

2. 如果事务设置为read-committed,事务提交后才能读取到更新后的数据,未提交的事务数据读取不到,避免脏读;但是会造成事务在多次读取数据时的数据不一致,也就是不可重复读。

3. 如果事务设置为repeatable-read,当前事务可以重复读,每次都能读取到相同数据,但是当有别的事务插入新的行时,之前事务会读取到多余的行。

4. 如果事务设置为serializable,当前事务执行时会锁表,并将其他事务的会话挂起,这是事务隔离级别最高的一种,会对性能产生影响。

你可能感兴趣的:(Mysql事务隔离级别)