实际上,忘记在 Bash 中测试查询结果。你可以做你想做的事(即仅在数据不存在时插入数据),只需一个 SQL 查询:
INSERT INTO mylittletable(thenumber, thedate)
SELECT * FROM (SELECT '$THENUMBER', '$THEDATE') AS tmp
WHERE NOT EXISTS (
SELECT 1 FROM mylittletable WHERE thenumber = '$THENUMBER'
) LIMIT 1;
更简单:如果您的thenumber
列是主键,或者如果您对其设置了唯一约束,您可以使用INSERT IGNORE
(当您尝试插入相同的数字时,这将使查询静默失败):
INSERT IGNORE INTO mylittletable VALUES ('$THENUMBER','$THEDATE');
就个人而言,我会选择第二种选择。如果对您的数据有意义,请考虑创建一个 UNIQUE 约束(或者thenumber
如果您的表还没有主键,则创建一个主键):
ALTER TABLE mylittletable ADD UNIQUE(thenumber);
编辑 :
如果您希望 Bash 在出现问题时输出某些内容,只需执行INSERT
(without IGNORE
) 并使用 mysql 客户端程序的退出状态:
echo "INSERT INTO mylittletable VALUES ($THENUMBER,'$THEDATE');" | mysql --host=192.168.0.0 --user=garfunkle --password=spatulaface mylovelydb 2> /dev/null || echo Warning!
或者,如果您不喜欢长单行:
mysql --host=192.168.0.0 --user=garfunkle --password=spatulaface mylovelydb 2> /dev/null << EOF
INSERT INTO mylittletable VALUES ($THENUMBER,'$THEDATE');
EOF
if [ $? -neq 0 ]
then
echo Warning!
fi
如果你不熟悉它,||
操作符在 Bash 中是这样使用的:
# If command1 fails, run command2
command1 || command2
# Silly example
ls myfile 2> /dev/null || echo "No myfile here!"
请注意,我还使用了错误重定向:2> /dev/null
因此错误不会输出到控制台。