当我在MySQL中执行此命令时:
SET FOREIGN_KEY_CHECKS=0;
它会影响整个引擎还是仅仅是我当前的交易?
当我在MySQL中执行此命令时:
SET FOREIGN_KEY_CHECKS=0;
它会影响整个引擎还是仅仅是我当前的交易?
Answers:
在设置问题方式时,它是基于会话的。
https://dev.mysql.com/doc/refman/5.7/zh-CN/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_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
foreign_key_checks
并且在同一会话中期望它忽略外键约束。您需要设置非全局变量。
正如罗恩(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不会强制执行外键。即使启用了外键和检查,也可以创建不一致的数据库。
如果您希望外键完全一致,则需要在启用检查的同时添加这些键。
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
如果您未设置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