我在我的mysql事務中遇到死鎖錯誤。MySQL返回死鎖插入行和FK被鎖定'更新'
我的情況簡單的例子:
Thread1 > BEGIN;
Query OK, 0 rows affected (0.00 sec)
Thread1 > SELECT * FROM A WHERE ID=1000 FOR UPDATE;
1 row in set (0.00 sec)
Thread2 > BEGIN;
Query OK, 0 rows affected (0.00 sec)
Thread2 > INSERT INTO B (AID, NAME) VALUES (1000, 'Hello world');
[Hangs]
Thread1 > INSERT INTO B (AID, NAME) VALUES (1000, 'Hello world2');
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
Thread2 >
Query OK, 1 row affected (10.00 sec)
B.AID是外鍵指A.ID
我看到三種解決方案:
- 捕獲死鎖錯誤代碼並重試查詢。
- 使用innodb_locks_unsafe_for_binlog在my.cnf
- 鎖(用於更新)表A中的線程2插入
之前有沒有其他解決辦法?
我可以;看看爲什麼這將是一個僵局,你的標題提到FK的。 A和B之間是否有外鍵關係,你沒有提及 – Elemental 2010-04-01 14:16:12
@Elemental:是的,有一個外鍵。 OP提到這一點,但有點神祕。我修改了帖子來說明問題。 – 2010-04-02 08:08:46