tablas restricción restricciones restriccion quitar puede los llaves llave foránea foreign foraneas foranea errores deshabilitar desactivar consulte con como claves cambiar borrar anteriores mysql command-line foreign-keys mysqlimport

restricción - quitar restriccion foreign key mysql



Deshabilitar las comprobaciones de claves externas en la línea de comando (4)

Tengo un script de respaldo para mi base de datos MySQL, usando mysqldump con la opción --tab para que produzca un archivo .sql para la estructura y un archivo .txt (separado por --tab ) para el contenido.

Algunas tablas tienen claves foráneas, así que cuando las importo obtengo el error:

ERROR 1217 (23000) en la línea 8: No se puede eliminar o actualizar una fila primaria: falla una restricción de clave externa

Sé sobre usar SET FOREIGN_KEY_CHECKS=0 (y SET FOREIGN_KEY_CHECKS=1 después). Si los agrego a cada archivo .sql , la importación funciona. Pero obviamente, en el próximo mysqldump los sobrescriben.

También intenté ejecutarlo como un comando separado, como a continuación, pero el error vuelve:

echo "SET FOREIGN_KEY_CHECKS=0" | mysql [user/pass/database] [all the imports] echo "SET FOREIGN_KEY_CHECKS=1" | mysql [user/pass/database]

¿Hay alguna otra forma de desactivar las comprobaciones FK en la línea de comando?


Ingresa a mysql:

mysql -u <username> -p -h <host_name or ip> A continuación, ejecute

1 SET FOREIGN_KEY_CHECKS=0;

2 SOURCE /pathToFile/backup.sql;

3 SET FOREIGN_KEY_CHECKS=1;


Puede hacer esto concatenando la cadena al archivo en línea. Estoy seguro de que hay una manera más fácil de concatenar cadenas y archivos, pero funciona.

cat <(echo "SET FOREIGN_KEY_CHECKS=0;") imports.sql | mysql

No creo que deba volver a establecerlo en 1, ya que es solo una sesión.


Solo otro para hacer lo mismo:

{ echo "SET FOREIGN_KEY_CHECKS=0;" ; cat imports.sql ; } | mysql


También puede usar el parámetro --init-command del comando mysql .

Es decir: mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ... mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...

Documentación de MySQL 5.5 - opciones de mysql