Mysql
 sql >> Database >  >> RDS >> Mysql

In MySQL, posso rinviare i controlli di integrità referenziale fino al commit

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.