繁体   English   中英

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

[英]Does MySQL foreign_key_checks affect the entire database?

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

SET FOREIGN_KEY_CHECKS=0;

它会影响整个引擎还是只是我当前的交易?

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

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

根据这个, FOREIGN_KEY_CHECKS是范围的“两者”。 这意味着可以为会话设置:

SET FOREIGN_KEY_CHECKS=0;

或全球:

SET GLOBAL FOREIGN_KEY_CHECKS=0;

实际上,有两个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

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

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不会强制执行外键。 即使启用了外键和检查,也可以创建不一致的数据库。

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

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

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

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

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

max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M

在C:\\ xampp \\ mysql \\ bin \\ my.ini中更改my.ini

max_allowed_packet = 1024M

在使用Mysql查询浏览器的情况下, SET FOREIGN_KEY_CHECKS=0; 对版本1.1.20没有任何影响。 但是,它在Mysql查询浏览器1.2.17上运行正常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM