it-swarm-pt.tech

O MySQL foreign_key_checks afeta todo o banco de dados?

Quando eu executo este comando no MySQL:

SET FOREIGN_KEY_CHECKS=0;

Isso afeta todo o motor ou é apenas a minha transação atual?

185
Sean Nguyen

É baseado em sessão, quando definido da maneira que você fez na sua pergunta.

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

De acordo com isso, FOREIGN_KEY_CHECKS é "Both" para o escopo. Isso significa que pode ser definido para a sessão:

SET FOREIGN_KEY_CHECKS=0;

ou globalmente:

SET GLOBAL FOREIGN_KEY_CHECKS=0;
219
Almo

Na verdade, existem duas variáveis ​​foreign_key_checks: uma variável global e uma variável local (por sessão). Na conexão, a variável de sessão é inicializada com o valor da variável global.
O comando SET foreign_key_checks modifica a variável de sessão.
Para modificar a variável global, use SET GLOBAL foreign_key_checks ou SET @@global.foreign_key_checks.

Consulte as seguintes seções do manual:
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

97
Ron Inbar

Conforme explicado por Ron, existem duas variáveis, local e global. A variável local é sempre usada e é a mesma que global na conexão.

SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;

SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable

Ao definir a variável GLOBAL, a local não é alterada para nenhuma conexão existente. Você precisa se reconectar ou definir a variável local também.

Talvez não seja intuitivo, o MYSQL não aplica chaves estrangeiras quando FOREIGN_KEY_CHECKS são reativadas. Isso possibilita a criação de um banco de dados inconsistente, mesmo que as chaves estrangeiras e as verificações estejam ativadas.

Se você quiser que suas chaves estrangeiras sejam completamente consistentes, você precisa adicionar as chaves enquanto a verificação estiver ativada.

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

Se você não definiu GLOBAL, apenas sua sessão foi afetada.

9
Mike Karras

Eu tive o mesmo erro quando tentei migrar o banco de dados Drupal para um novo servidor Apache local (estou usando o XAMPP na máquina Windows). Na verdade, não sei o significado desse erro, mas depois de tentar as etapas abaixo, importei o banco de dados sem erros. Espero que isso possa ajudar:

Alterando o arquivo php.ini em C:\xampp\php\php.ini

max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M

Alterando my.ini em C:\xampp\mysql\bin\my.ini

max_allowed_packet = 1024M
0
Saeed cr7