mysql的ACID基本属性:原子性、一致性、隔离性、持久性。
以下对隔离性做出理解
何为脏读、幻读、不可重复读?
脏读:通俗来讲就是我在一次事务执行中读取到你还未提交的数据
幻读:通俗来讲就是我把一张表的一个字段全部修改,这个时候你又插入了一条数据,然后我看到你那条数据并未被修改。事务非独立执行发生。
不可重复读:事务执行中,多次查询同一条数据得到不同结果。
脏读和不可重复读的区别则在于脏读读的是未提交,不可重复读读的是已提交
事务的隔离级别:
1、读未提交
当前事务还未提交就能被其他事物看到。任何情况都无法保证。
2、读已提交
一个事务提交后才能被另外一个事务读取。能够避免脏读,但是可能造成不可重复读。
3、可重复读(这也是mysql的默认隔离级别)
多个事务读取统一范围的数据,返回第一次查询的快照。即使其他事务修改了数据,也必须保证在事务在执行期间看到的数据必须保持一致。避免脏读、不可重复读,可能出现幻读。
4、串行化(最可靠、代价最大的级别)
读和写都会加锁,读写锁出现冲突时,后一个必须等前一个事物执行完。百分百避免脏读、幻读、不可重复读。