Errore di deadlock nella mia transazione mysql.Ritorno MySQL Deadlock con riga di inserimento e FK bloccato 'per aggiornamento'
Il semplice esempio della mia situazione:
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 è una chiave esterna riferiva a A.ID
Vedo tre soluzioni: errore di stallo
- cattura nel codice e riprovare la query.
- uso innodb_locks_unsafe_for_binlog in my.cnf
- serratura (per l'aggiornamento) Tabella A del Thread2 prima inserto
C'è qualche altre soluzioni?
Non riesco a capire perché questo sarebbe un punto morto e il tuo titolo menziona FK. C'è una relazione di chiave esterna tra A e B che non hai menzionato – Elemental
@Elemental: Sì, c'è una chiave esterna. OP ha menzionato questo, ma in modo piuttosto criptico. Ho modificato post per renderlo chiaro. –