Quando executo este comando no MySQL:
SET FOREIGN_KEY_CHECKS=0;
Isso afeta todo o mecanismo ou é apenas minha transação atual?
Quando executo este comando no MySQL:
SET FOREIGN_KEY_CHECKS=0;
Isso afeta todo o mecanismo ou é apenas minha transação atual?
Respostas:
É 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
é "Ambos" 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;
Na verdade, existem duas foreign_key_checks
variáveis: uma variável global e uma variável local (por sessão). Após a 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 da 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-variable.html
foreign_key_checks
e, na mesma sessão, espera que ele ignore as restrições de chaves estrangeiras. Você precisa definir a variável não global.
Como 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 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 é reativado. Isso possibilita a criação de um banco de dados inconsistente, mesmo com chaves estrangeiras e verificações ativadas.
Se você deseja que suas chaves estrangeiras sejam completamente consistentes, adicione-as enquanto a verificação estiver ativada.
# 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.
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 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
No caso de usar o navegador de consulta Mysql, SET FOREIGN_KEY_CHECKS=0;
não tem nenhum impacto na versão 1.1.20. No entanto, ele funciona bem no navegador de consultas Mysql 1.2.17