一尘不染

如何截断外键约束表?

mysql

为什么没有一个 TRUNCATEmygroup工作?即使ON DELETE CASCADE SET我知道了:

错误1701(42000):无法截断在外键约束中引用的表(mytestinstance,CONSTRAINT
instance_ibfk_1FOREIGN KEY(GroupID)参考mytestmygroupID))

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;

阅读 252

收藏
2020-05-17

共1个答案

一尘不染

您不能TRUNCATE在上面应用FK约束的表(TRUNCATE与相同DELETE)。

要变通解决此问题,使用这些解决方案之一。两者都存在破坏数据完整性的风险。

选项1:

  1. 消除约束
  2. 执行 TRUNCATE
  3. 手动删除现在 无处* 引用的行 *
  4. 创建约束

选项2: user447951
其答案中建议

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table $table_name; 
SET FOREIGN_KEY_CHECKS = 1;
2020-05-17