我正在使用:
我有以下顺序
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
嗯,即使在:
和SELECT @@FOREIGN_KEY_CHECKS;
返回 1
原始错误消息不会再次出现。
因此似乎 'SET foreign_key_checks = 1'
无法正常工作或需要额外的配置/指令
我希望能够随时禁用和启用FK安全约束
答案 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/