Tuesday, 13 November 2018

Can't drop table: A foreign key constraint fails


In MySQL I want to drop a table.
I tried a lot things but I keep getting the error that the table named bericht
 can't be dropped. This is the error I'm getting:
#1217 - Cannot delete or update a parent row: a foreign key constraint fails
How do I drop this table?

 Answers



This should do the trick:
SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;
As others point out, this is almost never what you want, even though it's whats asked in 
the question. A more safe solution is to delete the tables depending on bericht before 
deleting bericht. See CloudyMarble answer on how to do that. I use bash and the 
method in my post to drop all tables in a database when I don't want to or can't delete 
and recreate the database itself.
The #1217 error happens when other tables has foreign key constraints to the table 
you are trying to delete and you are using the InnoDB database engine. This solution
 temporarily disables checking the restraints and then re-enables them.
 Read the documentation for more. Be sure to delete foreign key restraints and 
fields in tables depending on bericht, otherwise you might leave your database 
in a broken state.








I realize this is stale for a while and an answer had been selected, but how about the 
alternative to allow the foreign key to be NULL and then choose 
ON DELETE SET NULL.
Basically, your table should be changed like so:
ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';
ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' 
FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' 
('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;
Personally I would recommend using both "ON UPDATE CASCADE" 
as well as "ON DELETE SET NULL" to avoid unnecessary complications, 
however your set up may dictate a different approach.

0 comments:

Post a Comment