sql >> Database teknologi >  >> RDS >> Mysql

Sletningsrækkefølge med fremmednøglebegrænsninger,

Officielt har du ingen kontrol over rækkefølgen af ​​de kaskadede operationer. Du kan muligvis misbruge nogle udokumenterede adfærd dog:

  • for MySQL 5.5 udføres fremmednøglerne i den rækkefølge, de blev oprettet, så slip og genskabe fk_category_org -constraint burde virke
  • for MySQL 5.6+ udføres fremmednøglerne i den leksikalske rækkefølge efter deres navne, så omdøbning af fk_category_org til f.eks. fk_z_category_org burde virke

Dette er udokumenteret og kan ændres når som helst (og kan blive påvirket af andre faktorer).

Når det er sagt, den rigtige måde at gøre dette på (og alt andet, der er for kompliceret til on cascade ) ville være at tilføje en before delete -trigger på din organisation -tabel, der "manuelt" sletter brugerne først og derefter kategorierne bagefter. before delete -triggere udføres før on cascade (så du kan beslutte, om du vil beholde dem eller ej, selvom det sandsynligvis ville være vildledende).

Det er ikke helt klart, om det er din tilsigtede adfærd, men i øjeblikket kan en bruger have en kategori, der tilhører organisation 1, mens han er tildelt organisation 2. Sletning af organisation 1 ville da stadig mislykkes. Det ser lidt ud som om, at det er det, du vil forhindre med dit design, men hvis du ønsker, at sletningen også skal virke i dette tilfælde, skal du bruge for at bruge triggeren til at kunne inkorporere det (eller manuelt slette det i din applikation), vil cascading ikke fungere, medmindre du også kaskade i kategoritabellen.




  1. Adgang nægtes ved vedhæftning af en database

  2. MySQL-type til opbevaring af et år:Smallint eller Varchar eller Dato?

  3. Symfony:Der opstod en undtagelse i driveren:kunne ikke finde driveren med mysql

  4. Oracle Concurrent Manager – CP Analyzer til E-Business Suite