当我在MySQL中执行这个命令:
SET FOREIGN_KEY_CHECKS=0;
它会影响整个引擎还是只影响我当前的事务?
当我在MySQL中执行这个命令:
SET FOREIGN_KEY_CHECKS=0;
它会影响整个引擎还是只影响我当前的事务?
当前回答
实际上,有两个foreign_key_checks变量:一个全局变量和一个本地(每个会话)变量。在连接时,会话变量被初始化为全局变量的值。 SET foreign_key_checks命令修改会话变量。 要修改全局变量,请使用SET global foreign_key_checks或SET @@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
其他回答
它是基于会话的,当你在你的问题中设置的时候。
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;
实际上,有两个foreign_key_checks变量:一个全局变量和一个本地(每个会话)变量。在连接时,会话变量被初始化为全局变量的值。 SET foreign_key_checks命令修改会话变量。 要修改全局变量,请使用SET global foreign_key_checks或SET @@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
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
如果你没有设置全局,只有你的会话受到影响。
如果使用Mysql查询浏览器,SET FOREIGN_KEY_CHECKS=0;对版本1.1.20没有任何影响。但是,它在Mysql查询浏览器1.2.17上运行良好
正如Ron所解释的,有两个变量,局部变量和全局变量。始终使用局部变量,并且在连接时与全局变量相同。
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并不强制外键。这使得即使打开了外键和检查,也可以创建不一致的数据库。
如果你想要你的外键完全一致,你需要在检查时添加键。