当非空结果集时,MySQL能否给出非零返回码?

时间:2016-05-26 09:46:49

标签: mysql bash shell

我正在使用Linux和MySQL 5.6

我以这种方式运行mysql:

mysql --user=XXX --password=XXX < myfile.sql

这是myfile.sql的内容

select * from account where balance < 0

我想做的是:

如果至少有一个帐户余额为负,请提供非零返回代码。

然后我的脚本可以像这样检查这种情况:

mysql --user=XXX --password=XXX < myfile.sql
if [[ $? -gt 0 ]]
then
    echo ERROR: Negative balance
fi

我可以实现吗?

或者,有没有其他方法?

2016-05-28更新:

实际上,我的真实案例很复杂。我用这个简单的例子是为了表达我的问题。

实际上有什么类似shell脚本函数中的[return]语句,以便我可以根据不同的情况给出不同的返回码吗?

对于下面接受的答案,看起来MySQL无法生成自定义的返回码。将计数(*)作为输出显示的最后一行似乎是另一种选择。

1 个答案:

答案 0 :(得分:1)

更改SQL以计算行数,而不是返回数据:

select COUNT(*) as total from account where balance < 0

然后捕获输出结果行数据(而不是$?中返回的结果代码,这只是查询执行的成功),跳过使用sed的第一行(列别名&#39; total&#39;),然后第二行是您的行数。

out=$(/opt/local/lib/mysql5/bin/mysql --user=XXX --password=XXX < myfile.sql | sed -n 2p)
if [[ $out -gt 0 ]]
then
    echo ERROR: Negative balance
fi

我已经在MacOSX而不是Linux中对此进行了测试,但原则应该相同。

(当然 - 您不会在源代码中嵌入数据库密码,是吗?)