sql >> Database >  >> RDS >> Mysql

Volgorde van verwijdering met externe sleutelbeperkingen,

Officieel heb je geen controle over de volgorde van de trapsgewijze bewerkingen. U kunt mogelijk misbruik maken van sommige ongedocumenteerde gedrag echter:

  • voor MySQL 5.5 worden de externe sleutels uitgevoerd in de volgorde waarin ze zijn gemaakt, dus het verwijderen en opnieuw maken van de fk_category_org -beperking zou moeten werken
  • voor MySQL 5.6+ worden de externe sleutels uitgevoerd in de lexicale volgorde van hun naam, dus hernoemen fk_category_org om bv. fk_z_category_org zou moeten werken

Dit is niet gedocumenteerd en kan op elk moment veranderen (en kan worden beïnvloed door andere factoren).

Dat gezegd hebbende, de juiste manier om dit te doen (en al het andere dat te ingewikkeld is voor on cascade ) zou zijn om een ​​before delete . toe te voegen -trigger op uw organisation -tabel die "handmatig" eerst de gebruikers verwijdert en daarna de categorieën. before delete -triggers worden uitgevoerd vóór on cascade (u kunt dus beslissen of u deze wilt houden of niet, hoewel het waarschijnlijk misleidend zou zijn).

Het is niet helemaal duidelijk of dat je beoogde gedrag is, maar op dit moment kan een gebruiker een categorie hebben die bij organisatie 1 hoort terwijl hij bij organisatie 2 is ingedeeld. Het verwijderen van organisatie 1 zou dan alsnog mislukken. Het lijkt een beetje alsof je dat wilt voorkomen door je ontwerp, maar als je wilt dat de verwijdering ook in dit geval werkt, moet je nodig om de trigger te gebruiken om dat op te nemen (of handmatig te verwijderen in uw toepassing), zal cascadering niet werken tenzij u ook cascadeert in de categorietabel.




  1. Hoe splits ik de uitvoer van mysqldump in kleinere bestanden?

  2. onbekende database in jdbc

  3. MySQL:dateert van vóór 1970

  4. Heeft iemand ontdekt hoe Amazon RDS-leesreplica's kunnen worden geschaald?