Force drop mysql bypassing foreign key constraint
我试图删除数据库中的所有表,除了一个,我最终得到以下错误:
Cannot delete or update a parent row: a foreign key constraint fails
当然,我可以试错,看看那些关键约束是什么,并最终删除所有表但我想知道是否有一种快速方法强制删除所有表(因为我将能够重新插入那些我 不想删除)。
谷歌针对某些建议使用以下方法的网站:
简短的回答是它没有真正做到这一点,因为我最终收到了同样的错误,而我能够删除更多的表。 我已经在Stack Overflow上看到了将所有外键链接到某个表的方法,但这样做太费时了,除非我编写所有脚本(在没有其他选项的情况下这是可行的)
数据库是4.1所以我不能使用
想法?
这可能对从搜索到此处结束的人有用。
确保您尝试删除表而不是视图。
1 2 3 4 5 6 |
如果您使用的是phpmyadmin,则此功能已经存在。
- 选择要删除的表
- 从表格列表底部的下拉列表中选择drop
-
将打开一个新页面,底部有一个复选框
"外键检查",取消选中。 - 接受"是"确认删除。
您可以使用以下步骤,它对我有用,可以使用约束删除表,解决方案已经在上面的注释中解释过,我只是添加了屏幕截图 -
Drop数据库存在于MySQL的所有版本中。但是如果你想保持表结构,这是一个想法
mysqldump --no-data --add-drop-database --add-drop-table -hHOSTNAME -uUSERNAME -p> dump.sql
这是一个程序,而不是mysql命令
然后,登录到mysql和
source dump.sql;
从终端一次性删除所有表的简单解决方案。
这包含了你的mysql shell中的几个步骤(虽然不是一步到位的解决方案),这对我有所帮助并节省了我的一天。
适用于服务器版本:5.6.38 MySQL社区服务器(GPL)
我遵循的步骤:
1 2 3 4 5 6 | 1. generate drop query using concat and group_concat. 2. use database 3. turn off / disable foreign key constraint check (SET FOREIGN_KEY_CHECKS = 0;), 4. copy the query generated from step 1 5. re enable foreign key constraint check (SET FOREIGN_KEY_CHECKS = 1;) 6. run show table |
MySQL shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $ mysql -u root -p Enter password: ****** (your mysql root password) mysql> SYSTEM CLEAR; mysql> SELECT CONCAT('DROP TABLE IF EXISTS `', GROUP_CONCAT(table_name SEPARATOR '`, `'), '`;') AS dropquery FROM information_schema.tables WHERE table_schema = 'emall_duplicate'; +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | dropquery | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> USE emall_duplicate; Database changed mysql> SET FOREIGN_KEY_CHECKS = 0; Query OK, 0 rows affected (0.00 sec) // copy and paste generated query from step 1 mysql> DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; Query OK, 0 rows affected (0.18 sec) mysql> SET FOREIGN_KEY_CHECKS = 1; Query OK, 0 rows affected (0.00 sec) mysql> SHOW tables; Empty set (0.01 sec) mysql> |
由于您不想保留任何数据,因此删除整个数据库并创建一个新数据库。