在上篇文章可重复读(REPEATABLE READ)幻读实验的结尾留了几个问题,先看看第二个问题加的什么锁,直接上结论:
多个事务通过索引并发修改(insert,update,delete)同一行数据时会添加排他锁(独占锁)
结论中提到通过索引修改,如果通过普通字段修改会如何呢,实验如下 准备数据:
INSERT INTO `payment`(`id`, `money`, `name`) VALUES (1, 6, '张三');
INSERT INTO `payment`(`id`, `money`, `name`) VALUES (2, 7, '李四');
将可重复读(REPEATABLE READ)幻读实验实验中session2的id改为2再进行一次操作,会发现session2的update操作不会卡住,也证明了上述结论在索引加锁,此时索引不同互不影响
对比:将session1的中的条件改为name='张三',会发现session2的update会卡住。
若对name设置索引呢,执行上述截图操作,不会卡住
结论:
- 多个事务通过索引(主键索引,普通索引)并发修改(insert,update,delete)同一行数据时会添加排他锁(独占锁)
- 多个事务并发,某事务修改记录的条件字段未加索引时会锁表
问题
- mysql有哪些锁