如何截断外键约束表?
为什么没有一个TRUNCATE mygroup
工作? 尽管我有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;
你不能TRUNCATE
已应用在它FK约束的表( TRUNCATE
是不一样的DELETE
)。
要解决此问题,请使用这些解决方案之一。 两者都存在破坏数据完整性的风险。
选项1:
TRUNCATE
选项2:由user447951在他们的答案中建议
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table $table_name;
SET FOREIGN_KEY_CHECKS = 1;
是的你可以:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table1;
TRUNCATE table2;
SET FOREIGN_KEY_CHECKS = 1;
使用这些语句,您可能会冒险让行进入不符合FOREIGN KEY
约束的表中。
我只是简单地做到这一点:
DELETE FROM mytest.instance;
ALTER TABLE mytest.instance AUTO_INCREMENT = 1;
链接地址: http://www.djcxy.com/p/65391.html