在命令行上禁用外键检查(Disabling foreign key checks on the co

2019-08-21 14:59发布

我有一个备份脚本为我的MySQL数据库,使用mysqldump--tab选项,它产生.sql的结构文件和.txt内容文件(竖线分隔)。

有些表有外键,所以当我导入它,我得到的错误:

在8号线ERROR 1217(23000):无法删除或更新父行,外键约束失败

我知道如何使用SET FOREIGN_KEY_CHECKS=0 (和SET FOREIGN_KEY_CHECKS=1之后)。 如果我添加这些到每个.sql文件,然后导入作品。 但是,那么显然就下mysqldump那些被覆盖。

我也尝试运行它作为一个单独的命令,如下图所示但错误回来:

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

有一些其他的方式来在命令行上禁用FK检查?

Answer 1:

您可以通过连接字符串的文件内嵌做到这一点。 我敢肯定有连接字符串和文件更简单的方法,但它的作品。

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

我不认为你需要将其设置回1,因为它只是一个会话。



Answer 2:

您还可以使用--init-command的参数mysql命令。

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

MySQL的5.5文档- MySQL的选择



Answer 3:

又一个一个做同样的:

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


Answer 4:

登录mysql命令行:

mysql -u <username> -p -h <host_name or ip>然后运行

1个SET FOREIGN_KEY_CHECKS=0;

2 SOURCE /pathToFile/backup.sql;

3个SET FOREIGN_KEY_CHECKS=1;



文章来源: Disabling foreign key checks on the command line