为什么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;