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 misalnyafk_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.