2

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

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

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

4

2 回答 2

2

是的,您不能截断具有外键约束的表

根据文档:-

如果引用该表的其他表存在任何 FOREIGN KEY 约束,则对于 InnoDB 表,TRUNCATE TABLE将失败。允许在同一个表的列之间进行外键约束。

尽管您可以这样做:-

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE table1;
SET FOREIGN_KEY_CHECKS=1;
于 2013-10-11T18:41:09.103 回答
0

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

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

需要明确的是,如果 TABLEB 包含约束

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

然后你不能先截断 TABLEA,因为这会在 TABLEB 中创建悬空引用。但是,如果您先截断 TABLEB,那么您将能够在没有错误的情况下截断 TABLEA。

于 2013-10-11T18:51:30.607 回答