mysql - 如何通过shell脚本验证test.sql文件中的所有查询是否都成功执行?

标签 mysql shell sh

我有一个 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 $?

如果查询失败,我希望它打印“失败”或停止 shellscript 的进一步执行。

最佳答案

如果您使用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 Exit immediately if a command exits with a non-zero status.

man mysql页面:

--execute=statement, -e statement
Execute the statement and quit. The default output format is like that produced with --batch. See Section 4.2.3.1, "Using Options on the Command Line", for some examples. With this option, mysql does not use the history file.

关于mysql - 如何通过shell脚本验证test.sql文件中的所有查询是否都成功执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57621255/

相关文章:

java - Hibernate:尝试获取锁时发现死锁

linux - 从 Shell 中的目录连接大量选择性文件

node.js - 是否可以从 Node 包的 `bin` 命令访问 npm 配置设置?

sh - 如何将 stderr 重定向到 cron 作业中的文件

php - 仅在没有引用时引用复合键的一个字段和 'ON DELETE CASCADE'

javascript - 模块 MySQL Nodejs

linux - 从终端历史记录中搜索和替换命令

linux - 如何在 Linux 上使用 grep 获得我预期的搜索结果

shell - 后台运行时进程未记录

php - mysql查询获取特定日期之间用户的详细信息