我有一个q.sql文件,它的查询如下
SET SQL_SAFE_UPDATES = 0;
UPDATE student SET gender = 'f' WHERE gender = 'm';
.
.
UPDATE student SET rollno = '03' WHERE rollno = '003';这个.sql文件是通过shellscript脚本执行的:
mysql -uuser -ppass DB < q.sql即使q.sql文件中的查询之一失败,也会执行该命令。现在,我要验证是否所有查询都已成功更新。
我尝试过echo $?,但是它总是打印0,即命令成功,即使q.sql中的查询失败了。
mysql -uuser -ppass DB < q.sql
echo $?如果查询失败,我希望它打印“失败”或停止stop脚本的进一步执行。
发布于 2019-08-23 07:53:47
如果使用bash,可以在脚本中使用set -e,并使用-e选项执行mysql脚本的每一行。
#!/bin/bash
set -e
while read line; do
mysql -uuser -ppass DB -e "$line"
done < q.sql有关信息,set --help显示:
如果命令以非零状态退出,-e立即退出。
man mysql页面:
-execute=语句,-e语句 执行语句并退出。默认输出格式与-批处理生成的输出格式类似.有关一些示例,请参阅4.2.3.1节“在命令行上使用选项”。使用此选项,mysql不使用历史文件。
发布于 2019-08-23 08:32:15
您可以在文件中捕获输出以进行进一步处理:
mysql -uuser -ppass DB < q.sql > mysql.out如果您有一个产生大量输出的查询,则可以通过寻呼机运行输出,而不是看着它从屏幕顶部滚动:
mysql -uuser -ppass DB < q.sql | more如果要以批处理模式获取交互式输出格式,请使用mysql -t。若要将执行的语句回显到输出,请使用mysql -v。
https://stackoverflow.com/questions/57621255
复制相似问题