MySQL配置,允许在引用表为空时执行truncate

标签 mysql truncate

我在两台不同的服务器上运行完全相同的代码:

Truncate table2;
Truncate table1;

两台服务器的表结构完全一样,table2有一个外键引用table1。

由于table2在table1之前被截断了,它是空的,没有指向table1的键,所以截断table2应该没有问题。 但是!!!:

在一台服务器上运行良好,在另一台服务器上出现外键约束错误:

Cannot truncate a table referenced in a foreign key constraint (user`.`table2`, 
CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `user`.`table1` (`ID`))

从这里我可以理解,必须有一个可以更改的设置,以便始终允许截断空表。如果不是服务器应该给我同样的错误。

我知道我可以改用 delete,但这是一个较长的过程,在这种情况下需要重置 auto_increment。

我只是想了解为什么服务器1没有错误而服务器2有错误。

有什么想法吗? 谢谢。

最佳答案

SET FOREIGN_KEY_CHECKS=0; TRUNCATE table1; SET FOREIGN_KEY_CHECKS=1;

关于MySQL配置,允许在引用表为空时执行truncate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22565207/

相关文章:

Mysql ORDER BY 或 MAX() 用于多个表字段排序?

C 中的命令行参数和 ftruncate

c - ftruncate 无法与 msys2 一起正常工作

javascript - 我想使用 JavaScript chop 带有省略号的文本或行

java - 在使用 Hibernate 时可以截断数据库表吗?

mysql - 需要左连接吗? WHERE 条件的行为类似于 INNER JOIN

mysql - 我应该设置什么 COLLATE 来使用所有可能的语言?

php - 在单个查询中查找 mysql 表中某个条目左侧和右侧的条目

java - 我的 HQL 查询有什么问题?

javascript - jQuery/JavaScript : Why does this freeze?