MySQL: błąd 1217
Przy usuwaniu pojedynczych tabel w bazie danych MySQL, często można spotkać się z odmową ze względu na istniejące klucze obce:
Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails
Jeśli schemat bazy danych jest skomplikowany, nie zawsze łatwe jest znalezienie klucza powodującego problem. Na szczęście z pomocą przychodzi tabela key_column_usage, które opisuje ograniczenia nałożone na kolumny:
select table_schema, table_name, column_name, constraint_name
from information_schema.key_column_usage
where referenced_table_schema = 'library' and referenced_table_name = 'author';
Poniższe zapytanie powinno zwrócić informację z nazwą schematu, tabeli, kolumny i ograniczenia które powoduje problem:
table_schema table_name column_name constraint_name
library book author_id book_ibfk_1
Aby uporać się z usunięciem przykładowej tabeli “author” należy wpierw usunąć tabelę “book”:
drop table library.book;
drop table library.author;
lub usunąć odpowiednie ograniczenie:
alter table library.book drop foreign key book_ibfk_1;
drop table library.author;
Skrypt tworzący przykładowy schemat: