为什么mygroup
上的 TRUNCATE不起作用?即使我有ON DELETE CASCADE SET
我也会得到:
ERROR 1701(42000):无法截断外键约束引用的表(
mytest
。instance
,约束instance_ibfk_1
外键(GroupID
)参考mytest
。mygroup
(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;
是的你可以:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table1;
TRUNCATE table2;
SET FOREIGN_KEY_CHECKS = 1;
使用这些语句,您有可能让不遵守FOREIGN KEY
约束的表进入行。
你不能TRUNCATE
已应用在它 FK 约束(表TRUNCATE
是不一样的DELETE
)。
要变通解决此问题,使用这些解决方案之一。两者都存在破坏数据完整性的风险。
选项 1:
TRUNCATE
选项 2:由user447951在其答案中建议
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table $table_name;
SET FOREIGN_KEY_CHECKS = 1;
我可以简单地用:
DELETE FROM mytest.instance;
ALTER TABLE mytest.instance AUTO_INCREMENT = 1;