mysql 隔离级别以及并发处理事务造成的问题

一、事务具有ACID四个属性

1. 原子性:事务的处理具有原子性,即全部提交或者全部不提交。原子性关注状态,要么全部成功,要么全部失败,不存在部分成功的状态

2. 一致性:事务开始和完成的时候数据必须保持一致性。一致性关注数据的可见性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见

3. 隔离性:是指事务在并发操作的时候事务之间互相不干扰,

4. 持久性:事务的修改是永久性的,即使出现系统故障也能够保持

 二、事务的隔离级别

隔离级别
读数据一致性
脏读
不可重复读
幻读
未提交读(Read uncommitted)
最低级别,只能保证不读取物理上损坏的数据
已提交读(Read committed)
语句级
可重复读(Repeatable read)
事务级
串行化(Serializable)
最高级别,事务级

三、并发处理事务可能造成的问题

1. 脏读: 读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。

2. 幻读:在一个事务中,两次查询得到满足条件的数据条数不一致。事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。---幻读主要针对update或delete

3. 不可重复读:在一个事务中,两次查询得到的数据不一致。事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。---不可重复读主要针对insert

 

posted @ 2021-01-04 17:08  会飞的猿  阅读(274)  评论(0编辑  收藏  举报