【问题标题】:Failing to drop or truncate a table未能删除或截断表
【发布时间】:2012-12-23 22:08:26
【问题描述】:

我尝试了所有方法来截断表格,但我总是收到相同的信息:

Cannot delete or update a parent row: a foreign key constraint fails (`mybdd`.`c_member`, CONSTRAINT `fk_cm_c_id` FOREIGN KEY (`c_id`) REFERENCES `comment` (`c_id`))

在这个网站上看一些帖子我试过这个:

更改表comment 添加约束 c_member 外键 (c_id) 参考comment (c_id);

但它不起作用:

无法创建表 'mybdd.#sql-2ee0_3769864' (errno: 150){"success":false,"error":"

1005 - 无法创建表 'sameditrbdd.#sql-2ee0_3769864' (errno: 150)

"}

我该怎么做?

标签: mysql truncate


【解决方案1】:

您需要删除对表的所有引用,包括所有外键约束和索引,然后才能删除表。

外键约束也可以阻止您删除特定行。

或者,您可以关闭外键检查,但重新打开它们可能会导致错误或不可预知的行为(因为数据库中的数据违反了您的约束)。

【讨论】:

  • 如何删除对表的所有引用?
  • @Newben - 您可以使用ALTER TABLE DROP FOREIGN KEY ... 删除另一个表具有的外部约束,该约束引用了您要删除的表中的某些内容。 (这必须是单独的 ALTER TABLE 语句。)当然,您需要知道哪些约束引用了表中的任何内容。
【解决方案2】:

你可以使用:

SET foreign_key_checks = 0;
DROP <your_table>
SET foreign_key_checks = 1;

【讨论】:

  • 我认为这不是一个好主意。根据您的建议,一些 mydd 表字段将与任何内容无关
  • 是的,它只是一种通用解决方案。通常你必须一起删除可能更适合你的约束
  • 我加了分号,现在试试
  • @Edga,我现在收到这条消息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'campaign SET foreign_key_checks = 1' 附近使用正确的语法
  • 我试过这个 SET foreign_key_checks = 0; DROP campaign SET foreign_key_checks = 1;而这个 SET foreign_key_checks = 0; DROP 活动 SET foreign_key_checks = 1;
【解决方案3】:

很可能是某些人或他们的进程劫持了您的餐桌!!!

你应该试着用他们的 spid # 来杀死他们!

要查看谁在劫持您的餐桌,请打开查询分析器以运行

execute sp_who2 'active' -- under the database of interest

然后,你自己判断是否可以杀死他们,或者打电话给登录的人。

要杀人,就去做

kill 999 -- your spid # found in that table returned by above command

之后,再次尝试截断或删除!

祝你好运!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多