'SET foreign_key_checks = 1'不再起作用

时间:2015-02-12 15:46:39

标签: mysql mysql-workbench

我正在使用:

  • mysql:stable 5.6.22(瓶装)
  • MySQLWorkBench 6.2

我有以下顺序

DROP TABLE IF EXISTS invoicedetail;
DROP TABLE IF EXISTS invoiceheader;
DROP TABLE IF EXISTS product;

当我使用Java(JDBC)并通过MySQLWorkBench失败时失败,错误消息是关于 FK子约束(我没有确切的错误消息),通过谷歌我做了一项研究,我已经找到了两次相同的有效解决方案。

我做了以下事情:

SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS invoicedetail;
DROP TABLE IF EXISTS invoiceheader;
DROP TABLE IF EXISTS product;
SET FOREIGN_KEY_CHECKS=1;

它再次起作用,只是玩,我试图再次执行

DROP TABLE IF EXISTS invoicedetail;
DROP TABLE IF EXISTS invoiceheader;
DROP TABLE IF EXISTS product;

确保SELECT @@FOREIGN_KEY_CHECKS;返回 1

原始错误消息不再出现。

我再次对Google进行了研究,发现了以下内容:

它说:It is session-based

嗯,即使在:

  • mysql服务器停止并重新启动
  • 工作台重新开启
  • 计算机重新启动

SELECT @@FOREIGN_KEY_CHECKS;返回 1

原始错误消息不会再次出现。

因此似乎 'SET foreign_key_checks = 1'无法正常工作或需要额外的配置/指令

我希望能够随时禁用和启用FK安全约束

2 个答案:

答案 0 :(得分:11)

我遇到了与PHPMyAdmin类似的问题。毕竟,问题是PHPMyAdmin正在添加(默认情况下)“FOREIGNK_KEY_CHECKS = 1”。

当我使用PHPMyAdming查询服务器时,在页面末尾检查了“启用外键检查”选项,因此查询中的“SET FOREIGN_KEY_CHECKS = 0”实际上都没有。

请确保您的问题的解决方案不是那么傻。 ; - )

答案 1 :(得分:1)

我有一个类似的问题。原来,您在“ SET foreign_key_checks = 0;”之后修改的所有行即使在“ SET foreign_key_checks = 1;”之后,也不会在以后进行检查。

在这里找到:https://www.mysqltutorial.org/mysql-disable-foreign-key-checks/