Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用锁表时InnoDB死锁_Mysql_Innodb_Deadlock - Fatal编程技术网

Mysql 使用锁表时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)。这两个人现在互相等待。会发生什么 这就是锁的授予方式;无论锁

我知道InnoDB可以在行级别检测和解决死锁,但是当您使用
锁表时会发生什么

出于某些原因,我发现锁定整个表比找出避免潜在死锁的逻辑更容易

那么,让我们假设您这样做:

LOCK TABLES tableA WRITE, tableB WRITE
现在,两个事务(
T1
T2
)同时尝试此操作。出于某种原因,我们假设
T1
无法获得
tableA
上的锁,但可以为
tableB
获得一个锁。 然后出现
T2
,锁定
tableA
,但不锁定
tableB
T1
)。这两个人现在互相等待。会发生什么

  • 这就是锁的授予方式;无论
    锁表指定的顺序如何
    ?如果不是的话,这难道不意味着两个相同的语句永远不会互相死锁吗
  • 有没有办法妥善处理这件事?一定要暂停吗
  • 根据手册,在事务中使用
    锁表
    是可以的,如下所述:

    锁表
    (您需要说
    等)将同时锁止所有表。两个多表
    LOCK
    语句不可能陷入死锁<代码>解锁表
    同时解锁它们。

    哦,是的,忘记了R/W部分(在我的问题中只是很明显)。太好了,谢谢。