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: