Jak wspomniano w komentarzach trzeba upuszczać żadnych tabel z FK contraints do innych tabel, po pierwsze, a następnie można usunąć tabele są powiązane.
przykład:
User
id: 1
name: Mike
Address
id: 1
user_id: 1 (FK constraint to User.id table.column)
address_1: 555 Main Street
Ta konfiguracja jest mieszaninę 1: 1 związku (more on data normalization), gdzie jeden rząd użytkownik może odwoływać się do jednego rzędu adresu, a ponieważ hałas adres zależy od istnienia szeregu użytkownika jeśli spróbujesz usunąć wiersz użytkownika, zobaczysz wspomniane błędy.
Ale jeśli najpierw upuścisz tabelę adresów, wszystko działa zgodnie z oczekiwaniami, ponieważ tabela użytkownika nie jest powiązana z żadną inną tabelą.
Zapewnienie w swoim schemacie referential integrity zapewnia, że nie będziesz miał osieroconych wierszy, które przenikają przez twoją aplikację opartą na danych.
Można również wydać następujące polecenia:
SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;
Ale ja zdecydowanie odradzam ten, jak można zerwać więzy integralności danych, a kończy się w prawdziwy bałagan. Widziałem, jak ktoś to robił w środowisku korporacyjnym, a oczyszczenie zajęło im tygodnie. Jednakże, jeśli robisz to dla celów testowania; jak pisanie testów jednostkowych, lub po prostu nauczyć, a ty nie chcesz usunąć tabele za każdym razem, można to zrobić:
# 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;
Właściwa konstrukcja schematu za pomocą kluczy obcych idzie po drodze do budowania dobrą podstawę dla dowolna aplikacja wykorzystująca dane. To zajmie trochę czasu, aby uzyskać głowę, kiedy używać i jak skonstruować ograniczenia klucza obcego, ale z czasem zaczniesz rozumieć. Dobrym sposobem na rozpoczęcie jest pobranie projektu open source, takiego jak magento, wordpress lub vbulletin i przyjrzenie się ich schematom. Możesz nawet introspekować te schematy przy użyciu MySQL workbench i wyświetlać ich Entity-Relationship Diagrams (ERD), które wizualnie demonstrują połączenia między tabelami.
Dlaczego po prostu nie "TRUNCATE"? – zerkms
patrz edytuj na pytanie – user61629
Spróbuj najpierw upuścić/skrócić temp_workers, ponieważ ma on ograniczenie FK do tabeli temp, a następnie do tabeli temp.. –