我正在使用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无法生成自定义的返回码。将计数(*)作为输出显示的最后一行似乎是另一种选择。
答案 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中对此进行了测试,但原则应该相同。
(当然 - 您不会在源代码中嵌入数据库密码,是吗?)