首页 文章

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

提问于
浏览
173

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

SET FOREIGN_KEY_CHECKS=0;

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

5 回答

  • 198

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

  • -1

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

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

    根据这个, FOREIGN_KEY_CHECKS 的范围是"Both" . 这意味着它可以设置为session:

    SET FOREIGN_KEY_CHECKS=0;
    

    或全球:

    SET GLOBAL FOREIGN_KEY_CHECKS=0;
    
  • 7

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

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

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

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

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

  • 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

相关问题