InnoDB事务隔离级别简述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanxing1964/article/details/82230407

一:事务的ACID特性

即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)是事务正确执行的四个条件。

原子性:要么全都执行,要么回滚到初始状态。

一致性:多个状态之间数据保持准确

隔离性:多个用户或者说事务并发时相互不会有影响

持久性:保存到数据库的数据是永久的

二:因隔离导致的问题

脏读:读了一个另一个事务尚未提交的数据

不可重复读:事务a读了一条数据,之后事务b把这条数据改了,然后事务a再读这条数据,肯定变了啊。

幻读:事务a按条件查出了3条数据,之后事务b又插入了一条数据,然后事务a再查,咦~ 怎么查出4条了?

    脏读和后两者的区别在于,脏读读了一条没有提交的数据,之后还不知道会不会提交呢,而后两者都是提交的数据。

不可重复读和幻读的区别是,不可重复读是一条数据别修改了,幻读可能是数据整体多了。

三:隔离性按照隔离强度分为四级:

    隔离从强到弱依次为

串行(Serializable ):默认转化为select ... in share mode 与delete、update互斥,就是我在操作这个表,其他的啥么都不能干,几乎不用。一致性最好,并发性最差。

可重复读(Repeatable read):普通的select使用快照读,即读副本的数据。锁select /update /delete 根据查询条件情况,会选择记录锁,间隙锁,临键锁。不会出现脏读和不可重复读,但是无法避免幻读。

读已提交(Read committed):普通的select使用快照读,select /update /delete 会使用记录锁,可能出现不可重复读和幻读。

读未提交(Read uncommitted):不加锁,并发性最好,一致性最差。

    默认的级别是可重复读

https://www.cnblogs.com/fjdingsd/p/5273008.html

https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/82186189

猜你喜欢

转载自blog.csdn.net/fanxing1964/article/details/82230407
今日推荐