Cuando ejecuto este comando en MySQL:
SET FOREIGN_KEY_CHECKS=0;
¿Afecta todo el motor o es solo mi transacción actual?
Cuando ejecuto este comando en MySQL:
SET FOREIGN_KEY_CHECKS=0;
¿Afecta todo el motor o es solo mi transacción actual?
Respuestas:
Se basa en la sesión, cuando se configura como lo hizo en su pregunta.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
De acuerdo con esto, FOREIGN_KEY_CHECKS
es "Ambos" para el alcance. Esto significa que se puede configurar para la sesión:
SET FOREIGN_KEY_CHECKS=0;
o globalmente:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
En realidad, hay dos foreign_key_checks
variables: una variable global y una variable local (por sesión). Tras la conexión, la variable de sesión se inicializa con el valor de la variable global.
El comando SET foreign_key_checks
modifica la variable de sesión.
Para modificar la variable global, use SET GLOBAL foreign_key_checks
o SET @@global.foreign_key_checks
.
Consulte las siguientes secciones del 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
foreign_key_checks
y en esa misma sesión esperar que ignore las restricciones de claves foráneas. Necesita establecer la variable no global.
Como explicó Ron, hay dos variables, local y global. La variable local siempre se usa, y es la misma que global al conectarse.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Al configurar la variable GLOBAL, la local no se cambia para ninguna conexión existente. También debe volver a conectar o establecer la variable local.
Quizás no sea intuitivo, MYSQL no aplica claves foráneas cuando FOREIGN_KEY_CHECKS se vuelven a habilitar. Esto hace posible crear una base de datos inconsistente aunque las claves externas y las comprobaciones estén activadas.
Si desea que sus claves externas sean completamente consistentes, debe agregar las claves mientras la verificación está activada.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Si no configuró GLOBAL, solo su sesión se vio afectada.
Tuve el mismo error cuando intenté migrar la base de datos de Drupal a un nuevo servidor apache local (estoy usando XAMPP en una máquina con Windows). En realidad, no sé el significado de este error, pero después de intentar los pasos a continuación, importé la base de datos sin errores. Espero que esto pueda ayudar:
Cambiar php.ini en C: \ xampp \ php \ php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
Cambiar my.ini en C: \ xampp \ mysql \ bin \ my.ini
max_allowed_packet = 1024M
En caso de utilizar el navegador de consultas Mysql, SET FOREIGN_KEY_CHECKS=0;
no tiene ningún impacto en la versión 1.1.20. Sin embargo, funciona bien en MySql query browser 1.2.17