MySQL实战03の事务隔离级别

提到事务,就会想到ACID(Atomicity、Consistency、Isolation、Durability,即原子性,一致性,隔离性,持久性)。

SQL标准的事务隔离级别包括:

读未提交:一个事务还没提交时,它做的变更就能被别的事务看到。
读提交:一个事务提交之后,它做的变更才会被其他事务看到。
可重复读:一个事务执行过程中,从事务开始到事务提交看到的数据是一致的。
串行化:对于同一条记录,串行访问,读写都会加锁。

Oracle默认隔离级别就是读提交,迁移到MySQL,需要修改隔离级别为读提交。将启动参数transaction-isolation值设置为READ-COMMITTED。

 

可重复读场景

对账功能中判断上个月的余额和本月余额的差额,是否与本月账单明细一致。在校对过程中,即使有用户交易,也不影响校对结果。

 

事务隔离实现

在MySQL中,实际上每条记录在更新的时候都会同时记录一条回滚操作。通过回滚操作,都可以得到前一个状态的值。同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。
避免长事务:长事务意味着系统里会存在很老的事务视图,占用大量存储空间。

 

原文出处:https://time.geekbang.org/column/article/68963(极客时间专栏)

posted @ 2019-01-25 10:40  华格瑞沙  阅读(165)  评论(0编辑  收藏  举报