事务并发-锁实验(1)

234 阅读1分钟

在上篇文章可重复读(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会卡住。

image.png

若对name设置索引呢,执行上述截图操作,不会卡住

结论:

  1. 多个事务通过索引(主键索引,普通索引)并发修改(insert,update,delete)同一行数据时会添加排他锁(独占锁)
  2. 多个事务并发,某事务修改记录的条件字段未加索引时会锁表

问题

  1. mysql有哪些锁