Description:
Page: http://dev.mysql.com/doc/refman/5.7/en/drop-table.html
The list of tables in a DROP TABLE statement have to be in the correct order. It drops as many tables as it can.
How to repeat:
mysql [test] > create table t1 (id int auto_increment primary key, name varchar(100) unique);
Query OK, 0 rows affected (0.01 sec)
mysql [test] > create table t2 (id int auto_increment primary key, name varchar(100), fname varchar(100), foreign key (fname) references t1 (name));
Query OK, 0 rows affected (0.01 sec)
mysql [test] > create table t3 (id int);
Query OK, 0 rows affected (0.01 sec)
mysql [test] > drop table t1, t2, t3;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql [test] > show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
+----------------+
1 row in set (0.00 sec)
mysql [test] > drop table t1;
Query OK, 0 rows affected (0.00 sec)
mysql [test] > create table t1 (id int auto_increment primary key, name varchar(100) unique);
Query OK, 0 rows affected (0.01 sec)
mysql [test] > create table t2 (id int auto_increment primary key, name varchar(100), fname varchar(100), foreign key (fname) references t1 (name));
Query OK, 0 rows affected (0.01 sec)
mysql [test] > create table t3 (id int); Query OK, 0 rows affected (0.01 sec)
mysql [test] > drop table t3, t2, t1;
Query OK, 0 rows affected (0.01 sec)
Suggested fix:
Order the tables before dropping them.
Maybe also update the documentation:
- Table order is significant
- Tries to delete every table, doesn't stop or rollback on error (no transactional-DDL)