mysql SET FOREIGN_KEY_CHECKS=0 不能从命令行或 shell 脚本工作

Posted

技术标签:

【中文标题】mysql SET FOREIGN_KEY_CHECKS=0 不能从命令行或 shell 脚本工作【英文标题】:mysql SET FOREIGN_KEY_CHECKS=0 not working from command line or shell script 【发布时间】:2014-07-28 15:49:31 【问题描述】:

mysql 提示符下设置 foreign_key_checks=0 运行良好,我能够删除具有外键约束的记录。

但是如果我从 shell 运行相同的命令,则不会显示错误,但是当我转到 mysql 并运行 delete 命令时,它会显示外键错误。 $(echo "SET FOREIGN_KEY_CHECKS=0" | mysql --uuser --ppassword db) 我必须从 shell 脚本运行它。 任何帮助都会很棒。

谢谢。

【问题讨论】:

那么,您是以.sql 脚本运行删除命令吗? 不是来自 .sql,来自 shell 脚本,bash 【参考方案1】:

如果您正在从脚本 .sql 文件运行 DELETE 命令,那么您可以尝试从 shell/命令行运行以下命令

echo "SET FOREIGN_KEY_CHECKS=0;" ; cat delete_query.sql ;  | mysql

您可以在 shell 脚本中运行此命令,或者使用

RESULT=`mysql -u username -p password -D dbname 
    -e "SET FOREIGN_KEY_CHECKS=0; DELETE FROM mytable WHERE some_condition;"`

(或)使用HERETAG 喜欢

RESULT=`/usr/bin/mysql -u username -p password<<SQL
use DB_Name
SET FOREIGN_KEY_CHECKS=0;
DELETE FROM mytable WHERE some_condition;
quit
SQL`

【讨论】:

我有一系列命令要从 shell 脚本执行,它必须作为 cron 作业运行。所以我必须在 shell 脚本中包含相同的内容。 @user3717858,把你所有的SQL命令放在.sql文件中,然后直接从shell脚本运行。这样比单独跑要好很多。 它不包含简单的mysql命令,有变量和循环。我必须将其重写为程序。如果没有其他解决方案,将尝试一下。谢谢。 当然我会试试这个选项。但是我已经写了很长的shell脚本,只有这个命令不起作用,这就是为什么我正在考虑获得一些解决方案。 @user3717858,查看编辑后的答案以了解如何在 shell 脚本中运行命令。

以上是关于mysql SET FOREIGN_KEY_CHECKS=0 不能从命令行或 shell 脚本工作的主要内容,如果未能解决你的问题,请参考以下文章

mysql 备份时出现 /*!40101 */

MySQL数据库(12):数据类型-Set集合

mysql set names 命令和 mysql 字符编码问题

mysql乱码

MYSQL8 变量“character_set_database”有啥用?

mySQL 用户定义函数中 set 命令的正确语法是啥?