Oficjalnie nie masz kontroli nad kolejnością operacji kaskadowych. Możesz być w stanie nadużyć niektórych nieudokumentowanych zachowanie jednak:
- dla MySQL 5.5, klucze obce są wykonywane w kolejności, w jakiej zostały utworzone, więc upuszczenie i ponowne utworzenie
fk_category_org
-ograniczenie powinno działać - dla MySQL 5.6+ klucze obce są wykonywane w porządku leksykalnym ich nazw, więc zmiana nazwy
fk_category_org
do m.in.fk_z_category_org
powinien działać
Jest to nieudokumentowane i może się zmienić w każdej chwili (na co może mieć wpływ inne czynniki).
Biorąc to pod uwagę, właściwy sposób na zrobienie tego (i wszystko inne zbyt skomplikowane dla on cascade
) byłoby dodanie before delete
-wyzwalacz
w Twojej organisation
-tabela, która "ręcznie" usuwa najpierw użytkowników, a następnie kategorie. before delete
-wyzwalacze są wykonywane przed on cascade
(abyś mógł zdecydować, czy chcesz je zachować, czy nie, chociaż prawdopodobnie byłoby to mylące).
Nie jest do końca jasne, czy to jest twoje zamierzone zachowanie, ale obecnie użytkownik może mieć kategorię należącą do organizacji 1, gdy jest przypisany do organizacji 2. Usunięcie organizacji 1 nadal nie powiedzie się. Wygląda na to, że chcesz temu zapobiec za pomocą swojego projektu, ale jeśli chcesz, aby usuwanie zadziałało również w tym przypadku, potrzebujesz aby użyć wyzwalacza, aby móc włączyć to (lub ręcznie usunąć w swojej aplikacji), kaskadowanie nie będzie działać, chyba że kaskadujesz również w tabeli kategorii.