Obtengo un error de interbloqueo en mi transacción mysql.MySQL return Deadlock con la fila de inserción y FK está bloqueado 'para la actualización'
El ejemplo simple de mi situación:
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 es una clave externa refería a A.ID
Veo tres soluciones: error estancamiento
- captura de código y vuelva a intentar la consulta.
- uso innodb_locks_unsafe_for_binlog en my.cnf
- bloqueo (Actualizar) en el cuadro A Thread2 antes de insertar
¿Hay alguna otra solución?
No puedo ver por qué esto sería un punto muerto y su título menciona FK. ¿Existe una relación de clave externa entre A y B que no mencionó – Elemental
@ Elemental: Sí, hay una clave externa. OP lo mencionó, pero de una manera algo críptica. Modifiqué la publicación para que quede claro. –