Mitt svar verkar vara här ...
Liksom MySQL i allmänhet, i en SQL-sats som infogar, tar bort eller uppdaterar många rader, kontrollerar InnoDB UNIKA och FOREIGN KEY-begränsningar rad för rad. När du utför kontroller av främmande nyckel ställer InnoDB in delade radnivålås på underordnade eller överordnade poster som den måste titta på. InnoDB kontrollerar omedelbart begränsningar för främmande nyckel; checken skjuts inte upp till transaktionsbekräftelse. Enligt SQL-standarden bör standardbeteendet skjutas upp vid kontroll. Det vill säga, begränsningar kontrolleras först efter att hela SQL-satsen har bearbetats. Tills InnoDB implementerar uppskjuten kontroll av begränsningar kommer vissa saker att vara omöjliga, som att ta bort en post som refererar till sig själv med hjälp av en främmande nyckel.
Tillbaka till ritbordet.