Jak bylo zmíněno v komentářích, musíte nejprve zrušit všechny tabulky s omezeními FK do jiných tabulek a poté můžete zrušit tabulky, ke kterým jsou připojeny.
Příklad:
User
id: 1
name: Mike
Address
id: 1
user_id: 1 (FK constraint to User.id table.column)
address_1: 555 Main Street
Toto nastavení je vztah 1:1 (více o normalizaci dat ), kde jeden řádek uživatele může odkazovat na jeden řádek adresy, a protože řádek adresy závisí na existenci řádku uživatele, pokusíte se odstranit řádek uživatele, uvidíte chyby, které jste zmínili.
Ale pokud nejprve zrušíte tabulku Address, vše funguje podle očekávání, protože tabulka User není FK k žádné jiné tabulce.
Zajištění referenční integrity v rámci vašeho schématu zajistí, že neskončíte s osamocenými řádky, které budou prostupovat celou vaší datovou aplikací.
Můžete také zadat následující příkazy:
SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;
Ale důrazně bych to nedoporučoval, protože byste mohli narušit referenční integritu svých dat a skončit ve skutečném nepořádku. Viděl jsem někoho, kdo to dělal v podnikovém prostředí, a trvalo mu týdny, než to uklidili. Pokud to však děláte PŘÍSNĚ pro testovací účely; jako psaní jednotkových testů nebo jen učení a nechtěli jste pokaždé zahodit tabulky, můžete to udělat takto:
# 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;
Správný návrh schématu využívající omezení cizího klíče jde cestou k vybudování dobrého základu pro jakoukoli datově řízenou aplikaci. Bude chvíli trvat, než si ujasníte, kdy použít a jak vytvořit omezení cizích klíčů, ale časem to začnete chápat. Dobrým způsobem, jak začít, je stáhnout si open source projekt jako magento , wordpress nebo vbulletin a podívejte se na jejich schémata. Tato schémata si můžete dokonce prohlédnout pomocí pracovního stolu MySQL a prohlédněte si jejich diagramy vztahů entit (ERD), které budou vizuálně demonstrovat propojení mezi tabulkami.