尝试删除所有数据并将AUTOMATIC_INCREMENT重置为值0,这样我就可以使用干净的数据库。找到一个截断函数,应该允许我执行上述操作,但它会抛出此错误.... 无法截断外键约束中引用的表
(`film`.`reviewed`, CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `film`.`films` (`movie_id`))
这是否意味着我必须删除FOREIGN KEY?
答案 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而没有错误。