Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa menggunakan kunci asing tanpa tindakan untuk menghapus atau memperbarui

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 seperti user_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 seperti file.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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL, mana yang lebih efisien longtext, text, atau blob? Meningkatkan efisiensi penyisipan

  2. Setel Ulang Kata Sandi Root MySQL di Windows

  3. Hentian halaman dalam HTML2Pdf

  4. Mengapa Eclipse mengusulkan Objek sebagai tipe pemetaan default untuk tipe data Teks?

  5. dapatkan nilai dari database MySQL dengan PHP