美文网首页
3:事务隔离级别:为什么你改了我还看不到?

3:事务隔离级别:为什么你改了我还看不到?

作者: _River_ | 来源:发表于2020-11-23 00:06 被阅读0次

事务的特点:同一个事务里 全部成功或者全部失败

ACID (原子性,一致性,隔离性(Isolation),持久性)

隔离性中的隔离级别: 

读未提交 读已提交( Oracle默认) 可重复读(Mysql默认) 串行化

两个事务的流程图

读未提交:V1 V2 V3 为2

读已提交:V1 =1   V2 = 2  V3 = 2

可重复读:V1 = 1  V2 = 1  (同一个事务内的一致性) V3 = 2

串行化:会通过加读写的方式保证一致性,读写锁冲突,则必须等前一个锁被解除才能执行。 

V1 = 1  V2 = 1  (这个时候读写锁冲突) V3 = 2

哪个隔离级别更好?

存在即合理,依照业务场景划分。

什么是回滚?(不纠结)

每一次数据更新的时候 但 没有提交之前  都会有记录 一条回滚记录(read-view)。

多条回滚记录形成一条回滚日志

回滚日志不会一直保留,当系统没有比这个回滚日志更早的read-view时删除

长事务会在这个事务提交之前,一直保留回滚记录,造成压力。

长事务的查询:

select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60

长事务的避免:

begin   或者  start  transaction 开启显式事务 后

有些客户端的连接框架会模式连接成功后执行 set autocommit=0 (取消自动提交) 导致之后的查询,假如说是长连接,那么就会是意外的长事务。

在设置autocommit =1 (设置为自动提交) 的情况下 会使用显式语句的方式启动事务

执行commit 则提交事务

执行commit and check 则提交事务后同时自动开启下一个显式事务(???)

相关文章

网友评论

      本文标题:3:事务隔离级别:为什么你改了我还看不到?

      本文链接:https://www.haomeiwen.com/subject/ggmuiktx.html