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

当我在MySQL中执行这个命令时:

SET FOREIGN_KEY_CHECKS=0; 

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

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

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

据此, FOREIGN_KEY_CHECKS对于范围是“Both”。 这意味着它可以设置为会话:

SET FOREIGN_KEY_CHECKS=0;

或全球:

SET GLOBAL FOREIGN_KEY_CHECKS=0;

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

实际上,有两个foreign_key_checksvariables:一个全局variables和一个本地(每个会话)variables。 连接时,会话variables被初始化为全局variables的值。
SET foreign_key_checks命令修改会话variables。
要修改全局variables,请使用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

正如罗恩所解释的那样,地方和全球有两个变数。 局部variables总是被使用,并且与连接时的全局variables相同。

 SET FOREIGN_KEY_CHECKS=0; SET GLOBAL FOREIGN_KEY_CHECKS=0; SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable 

设置GLOBALvariables时,本地连接variables不会更改。 您需要重新连接或设置本地variables。

也许不直观,当FOREIGN_KEY_CHECKS被重新启用时,MYSQL不强制执行外键。 这使得可以创build一个不一致的数据库,即使外键和检查打开。

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

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

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

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