Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann ich in MySQL referenzielle Integritätsprüfungen bis zum Commit verschieben?

Sieht so aus, als wäre meine Antwort hier ...

Wie MySQL im Allgemeinen prüft InnoDB in einer SQL-Anweisung, die viele Zeilen einfügt, löscht oder aktualisiert, UNIQUE- und FOREIGN KEY-Einschränkungen Zeile für Zeile. Bei der Durchführung von Fremdschlüsselprüfungen setzt InnoDB gemeinsame Sperren auf Zeilenebene für untergeordnete oder übergeordnete Datensätze, die es sich ansehen muss. InnoDB prüft Fremdschlüsselbeschränkungen sofort; die Überprüfung wird nicht auf Transaktionscommit verschoben. Gemäß dem SQL-Standard sollte das Standardverhalten die verzögerte Prüfung sein. Das heißt, Constraints werden erst geprüft, nachdem die gesamte SQL-Anweisung verarbeitet wurde. Bis InnoDB die verzögerte Einschränkungsprüfung implementiert, werden einige Dinge unmöglich sein, wie z. B. das Löschen eines Datensatzes, der mit einem Fremdschlüssel auf sich selbst verweist.

Zurück zum Reißbrett.