mysql多个锁,单行

时间:2016-09-22 22:26:27

标签: mysql transactions locking

This article说:

  Tx 1: lock A, then B 
  Tx 2: lock B, then A 
     

因为InnoDB在内部启动事务,所以你可以继续   遇到僵局。

     

无法逃避它。

当许多线程试图插入具有相同PK的行时,我看到错误代码1213,但我不明白如何有两个锁。是不是只有那一行的单锁?

1 个答案:

答案 0 :(得分:0)

如果它是read lock,则可以有多个,因为共享读锁,但任何时候只能有一个write lock。每个DML操作(insert/update/delete)都将在隐式事务上运行,并将在该行上保持行级锁定,因此如果任何其他线程尝试对该特定行执行写操作,则必须等待现有锁定由于写锁是独占锁,因此被释放。

您已发布 Tx 1:锁定A,然后B Tx 2:锁定B,然后A 肯定会导致deadlock的情况,这就是锁定发生在两个阶段的原因。 Growing phase当事务将获取执行事务所需的所有锁,Shrinking phase何时它将开始释放该事务持有的锁。