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.