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 set names 命令和 mysql 字符编码问题