当我在MySQL中执行此命令时:
SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
它会影响整个引擎还是只是我当前的交易?
Alm*_*lmo 234
它是基于会话的,当你按照问题的方式设置时.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
据此FOREIGN_KEY_CHECKS,范围是"两者".这意味着可以为会话设置:
SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
或全球:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
Ron*_*bar 98
实际上,有两个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 -系统- variables.html
Bou*_*egh 12
正如罗恩所解释的,有两个变量,局部变量和全局变量.始终使用局部变量,并且与连接时的全局变量相同.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Run Code Online (Sandbox Code Playgroud)
设置GLOBAL变量时,不会更改任何现有连接的本地变量.您还需要重新连接或设置本地变量.
也许不直观,当重新启用FOREIGN_KEY_CHECKS时,MYSQL不会强制执行外键.即使启用了外键和检查,也可以创建不一致的数据库.
如果希望外键完全一致,则需要在启用检查时添加键.
小智 9
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Run Code Online (Sandbox Code Playgroud)
如果您没有设置SET GLOBAL,则只会影响您的会话.