Zoals vermeld in de opmerkingen, moet u eerst alle tabellen met FK-beperkingen naar andere tabellen laten vallen, daarna kunt u de tabellen waarnaar wordt gelinkt, verwijderen.
Voorbeeld:
User
id: 1
name: Mike
Address
id: 1
user_id: 1 (FK constraint to User.id table.column)
address_1: 555 Main Street
Deze opstelling is een 1:1-relatie (meer over gegevensnormalisatie ), waarbij één gebruikersrij kan verwijzen naar één adresrij, en omdat de adresrij afhankelijk is van het bestaan van de gebruikersrij, ziet u de fouten die u noemde als u probeert de gebruikersrij te verwijderen.
Maar als u eerst de Address-tabel laat vallen, werkt alles zoals verwacht omdat de User-tabel niet FK is voor een andere tabel.
Zorgen voor referentiële integriteit binnen uw schema zorgt ervoor dat u niet eindigt met verweesde rijen, die door uw gegevensgestuurde toepassing zullen doordringen.
U kunt ook de volgende opdrachten geven:
SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;
Maar ik zou dit ten zeerste afraden, omdat je de referentiële integriteit van je gegevens zou kunnen verbreken en in een echte puinhoop terecht zou kunnen komen. Ik heb iemand dit zien doen in een bedrijfsomgeving en het kostte ze weken om het op te ruimen. Als u dit echter STRIKT doet, voor testdoeleinden; zoals het schrijven van unit-tests, of gewoon leren, en je wilde niet elke keer de tafels laten vallen, je zou dit kunnen doen:
# Because we remove the foreign key check, we can truncate in any order
SET foreign_key_checks = 0;
TRUNCATE TABLE user;
TRUNCATE TABLE address;
SET foreign_key_checks = 1;
Een goed schemaontwerp met behulp van externe sleutelbeperkingen helpt bij het bouwen van een goede basis voor elke datagestuurde toepassing. Het zal tijd kosten om erachter te komen wanneer u deze moet gebruiken en hoe u externe sleutelbeperkingen moet construeren, maar na verloop van tijd zult u het gaan begrijpen. Een goede manier om te beginnen is door een open source-project te downloaden, zoals magento , wordpress , of vbulletin en bekijk hun schema's. U kunt deze schema's zelfs introspecteren met behulp van MySQL workbench en bekijk hun Entity-Relationship Diagrams (ERD's), die visueel verbanden tussen tabellen demonstreren.