如何截断外键约束表?

为什么没有一个TRUNCATE mygroup工作? 尽管我有ON DELETE CASCADE SET我得到:

ERROR 1701(42000):无法截断外键约束引用的表( mytestinstance ,约束instance_ibfk_1外键( 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;

你不能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

    上一篇: How to truncate a foreign key constrained table?

    下一篇: Can table columns with a foreign key be null?