roy*_*roy 48 mysql sql drop-table
在MySQL中我想删除一个表.
我尝试了很多东西,但我不断收到错误,表名bericht不能删除.这是我得到的错误:
#1217 - 无法删除或更新父行:外键约束失败
我该如何删除此表?
Run*_*ard 125
这应该做的伎俩:
SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)
正如其他人所指出的那样,这几乎不是你想要的,尽管问题是什么问题.更安全的解决方案是在删除bericht之前删除表bericht.请参阅CloudyMarble有关如何执行此操作的答案.当我不想删除或无法删除并重新创建数据库本身时,我使用bash和我的帖子中的方法删除数据库中的所有表.
#1217当其他表对您要删除的表具有外键约束并且您正在使用InnoDB数据库引擎时,会发生此错误.此解决方案暂时禁用检查约束,然后重新启用它们.阅读文档了解更多信息.请务必删除表中的外键约束和字段bericht,否则可能会使数据库处于损坏状态.
Clo*_*ble 67
试试这个:
SELECT *
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'YourTable';
Run Code Online (Sandbox Code Playgroud)
这应该可以为您提供哪些表具有您要删除的表的引用,删除这些引用后,或者在此表中引用数据集的数据集,您将能够删除表
小智 12
但幸运的是,使用 MySQL FOREIGN_KEY_CHECKS 变量,您完全不必担心 DROP TABLE 语句的顺序,您可以按照您喜欢的任何顺序编写它们——甚至完全相反——就像这样:
SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;
Run Code Online (Sandbox Code Playgroud)
如需更多说明,请查看以下链接:
http://alvinalexander.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys/
使用show create table tbl_name查看外键
您可以使用此语法删除外键:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
这里还有更多信息(参见Frank Vanderhallen的帖子):http: //dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html