Mysql 使用锁表时InnoDB死锁
我知道InnoDB可以在行级别检测和解决死锁,但是当您使用Mysql 使用锁表时InnoDB死锁,mysql,innodb,deadlock,Mysql,Innodb,Deadlock,我知道InnoDB可以在行级别检测和解决死锁,但是当您使用锁表时会发生什么 出于某些原因,我发现锁定整个表比找出避免潜在死锁的逻辑更容易 那么,让我们假设您这样做: LOCK TABLES tableA WRITE, tableB WRITE 现在,两个事务(T1和T2)同时尝试此操作。出于某种原因,我们假设T1无法获得tableA上的锁,但可以为tableB获得一个锁。 然后出现T2,锁定tableA,但不锁定tableB(T1)。这两个人现在互相等待。会发生什么 这就是锁的授予方式;无论锁
锁表时会发生什么
出于某些原因,我发现锁定整个表比找出避免潜在死锁的逻辑更容易
那么,让我们假设您这样做:
LOCK TABLES tableA WRITE, tableB WRITE
现在,两个事务(T1
和T2
)同时尝试此操作。出于某种原因,我们假设T1
无法获得tableA
上的锁,但可以为tableB
获得一个锁。
然后出现T2
,锁定tableA
,但不锁定tableB
(T1
)。这两个人现在互相等待。会发生什么
这就是锁的授予方式;无论锁表指定的顺序如何
?如果不是的话,这难道不意味着两个相同的语句永远不会互相死锁吗
有没有办法妥善处理这件事?一定要暂停吗
根据手册,在事务中使用锁表是可以的,如下所述:锁表
(您需要说读
或写
等)将同时锁止所有表。两个多表LOCK
语句不可能陷入死锁<代码>解锁表
同时解锁它们。哦,是的,忘记了R/W部分(在我的问题中只是很明显)。太好了,谢谢。