MySQL-INNODB-事务隔离级别-MVCC

mysql的四种隔离机制-mvcc

共享锁s: 加上之后, 其他线程读取只能加s锁, 不能加x锁,只能读不能修改, 直到释放s锁
排它锁x:加上之后, 其他线程就不以在加锁进行读取控制, 默认写都是会加排它锁, 但对不加锁s的读就没办法限制

四种隔离级别

未提交读

默认写会加上排它锁, 读取不会加任何锁, 所以会造成脏读

已提交读

默认写会加上排它锁, 读不会加锁, 但用MVCC(多版本并发工具)来控制多线程造成的脏读问题
MVCC 在每次select时候都会生成一个当前最新数据的快照, 然后在此基础上读取, 这样就不会产生脏读,

可重复度

和已提交读的区别在于, select的时机, 他只会在事务开始的第一次select生成快照, 以后都在此快照上面做修改, 从而可以可重复度

Serializable

读写都加锁, 实现强一致性

INNODB MVCC
行级锁
数据行会隐式的加上记录列, 删除事务版本号, 创建事务版本号, 回滚指针等
通过生成最新数据的快照, 来保证事务数据之间读取的隔离性

select 的时候, 保证以下条件:

  1. 数据列事务创建版本号, 不能高于于自身的版本号, 保证数据在事务开始前就存在, 或者在当前事务中存在

  2. 删除列的版本必须大于当前事务版本号, 或者未定义, 保证在事务开始前没有被删除

    https://www.cnblogs.com/moershiwei/p/9766916.html 写的很好容易理解

你可能感兴趣的:(MySQL)