我在我的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