Oficiálně nemáte žádnou kontrolu nad pořadím kaskádových operací. Možná budete moci zneužít některé nedokumentované chování však:
- u MySQL 5.5 se cizí klíče spouštějí v pořadí, v jakém byly vytvořeny, takže vypuštění a opětovné vytvoření
fk_category_org-omezení by mělo fungovat - pro MySQL 5.6+ se cizí klíče spouštějí v lexikálním pořadí jejich jmen, takže přejmenování
fk_category_orgk např.fk_z_category_orgby měl fungovat
Toto není zdokumentováno a může se kdykoli změnit (a může být ovlivněno jinými faktory).
Jak již bylo řečeno, správný způsob, jak to udělat (a cokoli jiného příliš komplikovaného pro on cascade ) by bylo přidat before delete -spouštěč
ve vaší organisation -tabulka, která "ručně" nejprve odstraní uživatele a poté kategorie. before delete -triggery se spouštějí před on cascade (takže se můžete rozhodnout, zda si je chcete ponechat nebo ne, i když by to pravděpodobně bylo zavádějící).
Není zcela jasné, zda je to vaše zamýšlené chování, ale v současné době může mít uživatel kategorii, která patří do organizace 1, zatímco je přiřazen k organizaci 2. Smazání organizace 1 by pak stále selhalo. Trochu to vypadá, že právě tomu chcete svým návrhem zabránit, ale pokud chcete, aby mazání fungovalo i v tomto případě, potřebujete chcete-li použít spouštěč k tomu, abyste jej mohli začlenit (nebo jej ručně odstranit ve vaší aplikaci), kaskádování nebude fungovat, pokud nezařadíte také tabulku kategorií.