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

Urutan penghapusan dengan batasan kunci asing,

Secara resmi, Anda tidak memiliki kendali atas urutan operasi berjenjang. Anda mungkin dapat menyalahgunakan beberapa tidak berdokumen perilaku namun:

  • untuk MySQL 5.5, kunci asing dieksekusi sesuai urutan pembuatannya, jadi hapus dan buat ulang fk_category_org -kendala harus bekerja
  • untuk MySQL 5.6+, kunci asing dieksekusi dalam urutan leksikal namanya, jadi ganti nama fk_category_org untuk misalnya fk_z_category_org harus bekerja

Ini tidak didokumentasikan dan dapat berubah kapan saja (dan mungkin dipengaruhi oleh faktor lain).

Karena itu, cara yang tepat untuk melakukan ini (dan hal lain yang terlalu rumit untuk on cascade ) akan menambahkan before delete -pemicu di organisation . Anda -tabel yang "secara manual" menghapus pengguna terlebih dahulu dan kemudian kategori sesudahnya. before delete -triggers dieksekusi sebelum on cascade (sehingga Anda dapat memutuskan apakah Anda ingin menyimpannya atau tidak, meskipun mungkin akan menyesatkan).

Tidak sepenuhnya jelas apakah itu perilaku yang Anda maksudkan, tetapi saat ini, pengguna dapat memiliki kategori yang termasuk dalam organisasi 1 saat dia ditugaskan ke organisasi 2. Menghapus organisasi 1 akan tetap gagal. Sepertinya itulah yang ingin Anda cegah dengan desain Anda, tetapi jika Anda ingin penghapusan berfungsi dalam kasus ini juga, Anda perlu untuk menggunakan pemicu agar dapat menggabungkannya (atau menghapusnya secara manual di aplikasi Anda), kaskade tidak akan berfungsi kecuali Anda juga kaskade dalam tabel kategori.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hosting Web Gratis dengan Dukungan PHP

  2. sisipan database mysql mengubah semua ID menjadi 4294967295

  3. Tabel Pivot PHP/MySQL

  4. Ambil 2 posting terakhir untuk setiap kategori

  5. Berapa nomor MAX jika saya menyimpan int(255) di MySQL?