MySQL截断错误

时间:2013-10-11 18:39:11

标签: mysql sql

尝试删除所有数据并将AUTOMATIC_INCREMENT重置为值0,这样我就可以使用干净的数据库。找到一个截断函数,应该允许我执行上述操作,但它会抛出此错误.... 无法截断外键约束中引用的表

(`film`.`reviewed`, CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `film`.`films` (`movie_id`))

这是否意味着我必须删除FOREIGN KEY?

2 个答案:

答案 0 :(得分:2)

是的,你不能TRUNCATE具有外键约束的表

根据 docs : -

  如果有任何FOREIGN KEY,

TRUNCATE TABLE 对InnoDB表失败   来自引用该表的其他表的约束。外键   允许同一个表的列之间的约束。

虽然您可以选择这样做: -

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE table1;
SET FOREIGN_KEY_CHECKS=1;

答案 1 :(得分:0)

您可以截断具有外键约束的表;我一直这样做。但是你必须以正确的顺序满足约束条件。

如果你有两个表,TABLEB有一个引用TABLEA的FK约束,那么你必须首先使用TRUNCATE TABLEB,然后是TABLEA。

要清楚,如果TABLEB包含约束

CONSTRAINT `xid_fk` FOREIGN KEY (`xid_fk`) REFERENCES `TABLEA` (`id`)

然后你不能先截断TABLEA,因为这会在TABLEB中创建悬空引用。但是,如果先截断TABLEB,则可以截断TABLEA而没有错误。