Sepertinya jawaban saya di sini ...
Seperti MySQL pada umumnya, dalam pernyataan SQL yang menyisipkan, menghapus, atau memperbarui banyak baris, InnoDB memeriksa batasan UNIQUE dan FOREIGN KEY baris demi baris. Saat melakukan pemeriksaan kunci asing, InnoDB menyetel kunci tingkat baris bersama pada catatan anak atau orang tua yang harus dilihatnya. InnoDB segera memeriksa batasan kunci asing; cek tidak ditangguhkan untuk melakukan transaksi. Menurut standar SQL, perilaku default harus ditangguhkan pemeriksaannya. Artinya, kendala hanya diperiksa setelah seluruh pernyataan SQL telah diproses. Sampai InnoDB mengimplementasikan pemeriksaan kendala yang ditangguhkan, beberapa hal tidak mungkin dilakukan, seperti menghapus catatan yang merujuk ke dirinya sendiri menggunakan kunci asing.
Kembali ke papan gambar.