Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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死锁_Mysql_Transactions_Innodb_Deadlock - Fatal编程技术网

如何解决MySQL死锁

如何解决MySQL死锁,mysql,transactions,innodb,deadlock,Mysql,Transactions,Innodb,Deadlock,MySQL中出现以下死锁 *** (1) TRANSACTION: TRANSACTION 1367965, ACTIVE 1 sec starting index read mysql tables in use 1, locked 1 LOCK WAIT 16 lock struct(s), heap size 992, 8 row lock(s), undo log entries 4 MySQL thread id 100, OS thread handle 0x1fbc, query

MySQL中出现以下死锁

*** (1) TRANSACTION:
TRANSACTION 1367965, ACTIVE 1 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 16 lock struct(s), heap size 992, 8 row lock(s), undo log entries 4
MySQL thread id 100, OS thread handle 0x1fbc, query id 825084 localhost ::1 root updating
UPDATE `products` SET `quantity`=1333 WHERE (`id` = 3355)

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 2503 page no 212 n bits 96 index `PRIMARY` of table `emerx2`.`products` trx id 1367965 lock_mode X locks rec but not gap waiting
Record lock, heap no 22 PHYSICAL RECORD: n_fields 66; compact format; info bits 0


*** (2) TRANSACTION:
TRANSACTION 1367967, ACTIVE 1 sec fetching rows
mysql tables in use 1, locked 1
2231 lock struct(s), heap size 125816, 43033 row lock(s)
MySQL thread id 87, OS thread handle 0x3a98, query id 825080 localhost 127.0.0.1 root updating
UPDATE products SET updated = NOW(), active = 1, supplier_id = '109', delivery_date = '2019-02-21 16:00:43', quantity = '1' WHERE supplier_id = '109' AND domain_id = 16

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 2503 page no 212 n bits 96 index `PRIMARY` of table `emerx2`.`products` trx id 1367967 lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0

有什么可能的解决办法吗?我不知道该怎么做,因为下面的更新没有任何共同之处,只有表

问题在于,在update命令中,我使用了两个非索引列。因此,现在我通过这两列选择主键,然后使用主键进行更新,它可以工作,而且出乎意料地快得多。

只需使用INDEXsupplier\u id、domain\u id。不要首先获取id;让MySQL来解决这个问题。而且它还可以避免扫描表,这会导致死锁或延迟。

您需要提供有关这两个事务的更多信息。这两个查询本身不能死锁。