一:事务的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