1. 标准事务【官方定义】
read-uncommitted:会出现脏读,读到未提交的内容
read-committed:会出现不可重复读,读到提交了的内容(某行)
repeatable read:会出现幻读,范围读取读到新insert的内容(某范围行)
Serializable:完美
2. InnoDB
read-uncommitted:无甚区别
read-committed: 无甚区别
repeatable read【默认】:采用MVCC来避免了不可重复读,采用局部锁(Next-Key Locking)避免了幻读
serializable:无甚区别
小结:
所以到底数据库的事务是怎么一回事不能看标准定义,还要看这个数据库本身的实现,不一定是会严格按照定义来实现
. 一致性非锁定读
MVCC:多版本技术,在repeatable read模式下,从undo读取事务开始时的行数据版本
. 一致性锁定读
即:select ...... for update, 这里给所有涉及到的所有查询行数据加上x锁
. 锁
这个观察好:INNODB_TRX/DATA_LOCKS 就可以推测出大概了。
只要记住:
x/x;x/s 不兼容
s/s 兼容