一文讲清楚事务隔离性

隔离性是啥

一个人操作数据库的时候,其他人都看不见
QQ截图20200822104910.png

实现原理

其他人不能读(mvcc)
QQ截图20200822110101.png
其他人不能写
通过加锁(锁)
QQ截图20200822105604.png

具体实现

mvcc

read-view一般由两部分组成:

  • 一部分由执行查询时所有未提交事 务id数组(数组里最小的id为min_id)
  • 另一部分是已创建的最大事务id(max_id),因为trx_id在数据库中是递增的。
  • 可重复读隔离级别下:一个事务中,多次查询的read-view不变
  • 读已提交隔离级别下:一个事务中,每次查询的read-view都会改变!
    QQ截图20200822110456.png
    QQ截图20200822110658.png

排他锁

小红对取前的时候加上了锁(排他锁),所以其他人不能取钱了,所以等小红这个操作(事务)结束了,这把锁才能解开

注意

-- 事务的开始时间是更新操作执行的时候
-- 读未提交没有mvcc的控制,因为读的时候不加任何锁,所以可以读取其他事务未提交的数据
-- 串行化select的时候会自动加共享锁,所以此时不能读取其他事务修改的数据

posted @ 2020-08-22 11:44  flyduck  阅读(49)  评论(0)    收藏  举报