Saya rasa Anda salah memahami apa yang ON DELETE NO ACTION
cara. Itu tidak bermaksud untuk menekan batasan kunci asing.
Saat Anda menghapus catatan yang dirujuk oleh kunci asing, InnoDB memiliki kemampuan untuk mengambil tindakan otomatis untuk memperbaiki situasi:
- bisa
CASCADE
, artinya, hapus catatan pengarah. (Ini masuk akal untuk sesuatu sepertiuser_address.user_id
. Jika Anda menghapus pengguna secara paksa, Anda mungkin ingin menghapus semua alamat pengguna juga.) - bisa
SET NULL
, artinya, hapus kunci pengarah. (Ini mungkin masuk akal untuk sesuatu sepertifile.last_modified_by
. Jika Anda menghapus pengguna secara paksa, Anda mungkin ingin file yang terakhir diubah menjadi "tidak dikenal".)
Jika Anda menentukan NO ACTION
, Anda memberi tahu InnoDB bahwa Anda tidak ingin mengambil salah satu dari tindakan ini. Jadi InnoDB tidak dapat memperbaiki situasi untuk Anda; yang bisa dilakukan hanyalah menolak DELETE
dan mengembalikan kesalahan.
Akibatnya, ON DELETE NO ACTION
sebenarnya sama dengan ON DELETE RESTRICT
(default).
(Catatan:dalam beberapa DBMS, dan dalam SQL standar, ON DELETE NO ACTION
sedikit berbeda dari ON DELETE RESTRICT
:di dalamnya, ON DELETE NO ACTION
berarti "terima DELETE
dalam transaksi saat ini, tetapi tolak seluruh transaksi jika saya mencoba melakukan sebelum memperbaiki masalah". Tetapi InnoDB tidak mendukung pemeriksaan yang ditangguhkan, jadi ia memperlakukan ON DELETE NO ACTION
persis sama dengan ON DELETE RESTRICT
, dan selalu menolak DELETE
segera .)
Lihat §§14.2.2.5 "FOREIGN KEY Batasan" dan 13.1.17.2 "Menggunakan Batasan KUNCI ASING " di Manual Referensi MySQL 5.6.