我正在运行两个脚本。
01_INIT_DATABASE.SQL
01_INIT_DATABASE.SQL
CREATE DATABASE foobar;
USE foobar;
CREATE USER 'foo'@'localhost' IDENTIFIED BY 'bar';
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'localhost' WITH GRANT OPTION;
CREATE USER 'foo'@'%' IDENTIFIED BY 'bar';
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'%' WITH GRANT OPTION;
and
01_DROP_DATABASE.SQL
USE foobar
DROP USER 'foo'@'localhost';
DROP USER 'foo'@'%';
DROP DATABASE IF EXISTS foobar;
如果其中一个没有正常运行,它们会有选择性地失败。
我该如何使它们可靠地运行(或优雅地失败,例如仅在用户存在时才删除)?
我是通过ant任务来运行它们的(如果影响的话,但实际上只是Java Exec的形式):
<exec executable="mysql" input="./src/main/ddl/create/01_init_database.sql">
<arg value="-uroot"/>
<arg value="-ptoor"/>
</exec>
我的 MySQL 版本是
mysql Ver 14.14 Distrib 5.5.52, for debian-linux-gnu (x86_64) using readline 6.2
更新:IF EXISTS 和 IF NOT EXISTS 不适用于 USER。对于 DATABASE,它可以正常工作。
错误 1064(42000):您的 SQL 语法有误;请检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行使用正确的语法,如“IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar'”。
错误 1064(42000):您的 SQL 语法有误;请检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行使用正确的语法,如“IF EXISTS 'foo'@'%'”。
IF EXISTS
在5.7版本中被添加。 http://dev.mysql.com/doc/refman/5.6/en/drop-user.htmlDROP USER user [, user] ...
http://dev.mysql.com/doc/refman/5.7/en/drop-user.htmlDROP USER [IF EXISTS] user [, user] ...
但问题是关于5.5版本的。 - undefined