Sembra che la mia risposta sia qui ...
Come MySQL in generale, in un'istruzione SQL che inserisce, elimina o aggiorna molte righe, InnoDB controlla i vincoli UNIQUE e FOREIGN KEY riga per riga. Quando esegue i controlli della chiave esterna, InnoDB imposta i blocchi condivisi a livello di riga sui record figlio o padre che deve esaminare. InnoDB controlla immediatamente i vincoli della chiave esterna; il controllo non è rinviato al commit della transazione. Secondo lo standard SQL, il comportamento predefinito dovrebbe essere il controllo differito. In altre parole, i vincoli vengono controllati solo dopo che l'intera istruzione SQL è stata elaborata. Fino a quando InnoDB non implementerà il controllo dei vincoli posticipati, alcune cose saranno impossibili, come l'eliminazione di un record che fa riferimento a se stesso utilizzando una chiave esterna.
Torna al tavolo da disegno.