如何截断外键约束表?
为什么没有一个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
