为什么我的团队中没有TRUNCATE?即使我有一个删除级联集,我得到:

错误1701(42000):无法截断外键约束(mytest.instance,constraint instance_ibfk_1 foreign key(GroupID)REFERENCES 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;

当前回答

你能做到的

DELETE FROM `mytable` WHERE `id` > 0

其他回答

获取旧的外键检查状态和sql模式是截断/删除表的最佳方法,就像Mysql Workbench在将模型同步到数据库时所做的那样。

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;`
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

DROP TABLE TABLE_NAME;
TRUNCATE TABLE_NAME;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

我只需要:

DELETE FROM mytest.instance;
ALTER TABLE mytest.instance AUTO_INCREMENT = 1;

在MYSQL数据库上测试

解决方案1:

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table1;

解决方案2:

DELETE FROM table1;
ALTER TABLE table1 AUTO_INCREMENT = 1;
TRUNCATE table1;

这对我有用。我希望,这对你也有帮助。谢谢你提出这个问题。

只需使用CASCADE

TRUNCATE "products" RESTART IDENTITY CASCADE;

但要做好级联删除的准备)

如果表的数据库引擎不同,则会出现此错误,因此请将其更改为InnoDB

ALTER TABLE my_table ENGINE = InnoDB;