MySQL foreign_key_checks会影响整个数据库吗?

时间:2011-12-16 18:39:58

标签: mysql

当我在MySQL中执行此命令时:

SET FOREIGN_KEY_CHECKS=0;

它是否会影响整个引擎,或者只是我当前的交易?

6 个答案:

答案 0 :(得分:219)

这是基于会话的,当你按照问题的方式设置时。

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

根据这一点,FOREIGN_KEY_CHECKS对于范围是“两者”。这意味着它可以设置为session:

SET FOREIGN_KEY_CHECKS=0;

或全球:

SET GLOBAL FOREIGN_KEY_CHECKS=0;

答案 1 :(得分:97)

实际上,有两个foreign_key_checks变量:全局变量和本地(每个会话)变量。连接后,会话变量初始化为全局变量的值 命令SET foreign_key_checks修改会话变量 要修改全局变量,请使用SET GLOBAL foreign_key_checksSET @@global.foreign_key_checks

请参阅以下手册章节:
http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

答案 2 :(得分:12)

正如罗恩所解释的,有两个变量,局部变量和全局变量。始终使用局部变量,并且与连接时的全局变量相同。

SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;

SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable

设置GLOBAL变量时,对于任何现有连接,都不会更改本地变量。您还需要重新连接或设置局部变量。

也许不直观,当重新启用FOREIGN_KEY_CHECKS时,MYSQL不会强制执行外键。即使启用了外键和检查,也可以创建不一致的数据库。

如果您希望外键完全一致,则需要在检查时添加密钥。

答案 3 :(得分:9)

# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';

如果您没有设置SET GLOBAL,则只会影响您的会话。

答案 4 :(得分:0)

当我尝试将Drupal数据库迁移到新的本地apache服务器时,我遇到了相同的错误(我在Windows计算机上使用XAMPP)。实际上,我不知道此错误的含义,但是在尝试了以下步骤之后,我没有错误地导入了数据库。希望这会有所帮助:

在C:\ xampp \ php \ php.ini中更改php.ini

bindActionCreators

将my.ini更改为C:\ xampp \ mysql \ bin \ my.ini

const mapDispatchToProps = {
    generateReport,
    remoteSubmit: () => submit("privateForm")
    }

答案 5 :(得分:-1)

如果使用Mysql查询浏览器,SET FOREIGN_KEY_CHECKS=0;对版本1.1.20没有任何影响。但是,它在Mysql查询浏览器1.2.17

上工作正常