Intention Locks
获取行共享锁(S)或者行排他锁(X)前获取,需要该表的IS 或者IX锁
show engine innodb status
暗示 TABLE LOCK table test.t trx id 10080 lock mode IX
Record Locks
作用于索引,没有索引时作用于聚簇索引
Gap Locks
也作用于索引,where id =2
且id列是唯一索引,那么执行Record Locks。如果id列没有唯一索引那么where id =2
lock the preceding gap。事务隔离级别=READ COMMITTED
不会触发间隙锁。
Next-Key Locks
next-key是record lock和gap lock的组合。 REPEATABLE READ
隔离级别,搜索或者扫描索引都会触发next-key 锁
Insert Intention Locks
插入前锁定gap
READ COMMITTED
执行update语句是获取扫描过的每行的x-lock,扫描结束后释放不匹配的行的x-lock,而REPEATABLE READ
不释放
READ_COMMITTED
先扫描索引查找匹配where条件的行,然后尝试获取匹配行的record lock。
commit
autocommit disabled
,没有显示提交,mysql回滚该事务
Consistent Nonlocking Reads
:tx1 启动后,不能看到tx2做的修改,如果盲更新tx2插入或更新后的记录后,那么tx1就能看见tx2的修改了
https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html
Posted in: MySQL practise
Comments are closed.