mysql锁和事务

11月 29, 2021 |

mysql锁

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.