0
我知道InnoDB可以检测并解决行级的死锁,但是当您使用LOCK TABLES
时会发生什么?使用锁表时InnoDB死锁
由于某些原因,我发现它偶尔更容易锁定整个表,而不是找出避免潜在死锁的逻辑。
所以,让我们假设你做的事:
LOCK TABLES tableA WRITE, tableB WRITE
现在,两笔交易(T1
和T2
),同时尝试这一点。出于某种原因,我们假设T1
无法获得tableA
的锁定,但可以获得tableB
的锁定。 然后T2
出现,得到tableA
锁定,但不在tableB
(T1
有那个)。这两个现在在等待对方。怎么了?
- 这是如何授予锁;不管
LOCK TABLES
指定的顺序如何?如果不是,那么这是不是意味着两个相同的陈述永远不会彼此僵化? - 有没有办法正确处理这个问题?它必须超时吗?
根据手册,它是没关系交易中使用LOCK TABLES
,按指定的位置:https://dev.mysql.com/doc/refman/5.7/en/lock-tables-and-transactions.html
哦,是的,忘记了R/W部分(在我的问题中显然)。很好,谢谢。 – nickdnk