视频地址:https://www.bilibili.com/video/BV1Vy4y1z7EX?p=108

https://cdn.nlark.com/yuque/0/2021/jpeg/576791/1631022577194-50eb9734-ee61-45c7-bfbc-ef555196f080.jpeg

https://cdn.nlark.com/yuque/0/2021/png/576791/1624702521109-a2426d0b-5024-4fe2-b302-d431a2f17d15.png#height=442&id=hZVFY&originHeight=884&originWidth=1032&originalType=binary&ratio=1&size=66409&status=done&style=none&width=516

A 教室和B教室中间有一道墙,这道墙可以很厚,也可以很薄。这就是事务的隔离级别。这道墙越厚,表示隔离级别就越高

事务和事务之间的隔离级有哪些呢?4个隔离

读未提交:read uncommitted(最低的隔离级别)《没有提交就读到了》

什么是读未提交? 事务A可以读取到事务B未提交的数据。 这种隔离级别存在的问题就是: 脏读现象!(Dirty Read) 我们称读到了脏数据。 这种隔离级别一般都是理论上的,大多数的数据隔离级别都是二档起步。

读已提交:read committed 《提交之后才能读到》

什么是读已提交? 事务A只能读取到事务B提交之后的数据。 这种隔离级别解决了什么问题? 解决了脏读的现象 这种隔离级别存在什么问题? 不可重复读取数据。 什么是不可重复读取数据呢? 在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,可能第二次再读取的时候,读到的数据是4条,3不等于4称为不可重复读取。

这种隔离级别是比较真实的数据,每一次读到的数据是绝对的真实。 oracle 数据库默认的隔离级别是:read committed

可重复读:repeatable read 《提交之后也读不到,永远读取的都是刚开启事务时的数据》

什么是可重复读取? 事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。 可重复读解决了什么问题? 解决了不可重复读取数据。 可重复读存在的问题是什么? 可能会出现幻影读。 每一次读取到的数据都是幻象。不够真实! 早晨9点开始开启了事务,只要事务不结束,到晚上9点,读到的数据还是那样!读到的是假象。不够绝对的真实。

MySQL 中默认的事务隔离级别就是这个!!!!!!

序列化/串行化:serializable (最高的隔离级别)

这是最高的隔离级别,效率最低。解决了所有的问题。 这种隔离级别表示事务排队,不能并发! 类似 synchronized , 线程同步(事务同步) 每一次读取到的数据都是最真实的,并且效率是最低的。

参考

https://www.bilibili.com/video/BV1Vy4y1z7EX?p=108

https://juejin.cn/post/6844903670916579336