为什么没有一个 TRUNCATE 上mygroup工作?即使ON DELETE CASCADE SET我知道了:
mygroup
ON DELETE CASCADE SET
错误1701(42000):无法截断在外键约束中引用的表(mytest。instance,CONSTRAINT instance_ibfk_1FOREIGN KEY(GroupID)参考mytest。mygroup(ID))
mytest
instance
instance_ibfk_1
GroupID
ID
drop database mytest; create database mytest; use mytest; CREATE TABLE mygroup ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB; CREATE TABLE instance ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, GroupID INT NOT NULL, DateTime DATETIME DEFAULT NULL, FOREIGN KEY (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE, UNIQUE(GroupID) ) ENGINE=InnoDB;
您不能TRUNCATE在上面应用FK约束的表(TRUNCATE与相同DELETE)。
TRUNCATE
DELETE
要变通解决此问题,使用这些解决方案之一。两者都存在破坏数据完整性的风险。
选项1:
选项2: 由 user447951 在其答案中建议
SET FOREIGN_KEY_CHECKS = 0; TRUNCATE table $table_name; SET FOREIGN_KEY_CHECKS = 1;