2016-09-26 12 views
0

現在、2つのスクリプトを実行しています。データベースとユーザーを確実に削除してMySQLで作成する方法

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; 

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 

で更新 EXISTSおよびEXIFTSが存在しない場合は、ユーザーに対しては機能しません。 DATABASEではうまく動作します。

ERROR 1064(42000):SQL構文にエラーがあります。 'IF NOT EXISTS'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。foo '@' localhost '1行目の' bar 'で識別されます。

ERROR 1064(42000) SQL構文のエラー。あなたのMySQLサーバーバージョンに対応するマニュアルをチェックしてください。正しい構文は、 'IF EXISTS' foo '@'% ''を1行目で使用してください。

答えて

1

IF NOT EXISTSをdatabasechemaとユーザー作成に追加できます。

CREATE DATABASE IF NOT EXISTS foobar; 
CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar'; 
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'localhost' WITH GRANT OPTION; 
CREATE USER IF NOT EXISTS 'foo'@'%' IDENTIFIED BY 'bar'; 
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'%' WITH GRANT OPTION; 

及びドロップのため:

DROP USER IF EXISTS 'foo'@'localhost'; 
DROP USER IF EXISTS 'foo'@'%'; 
DROP DATABASE IF EXISTS foobar; 

下記のように:存在しない場合、ユーザは唯一のMySQL 5.7以降で動作します。 が5.7以下のユーザーの構文を作成し、それにgrant文​​を変更し、使用しないでください:

GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'localhost' identified by 'password' WITH GRANT OPTION; 
+0

IFが存在し、EXISTSされていない場合、私にUSER – Vihung

+0

ERROR 1064(42000)の構文エラーを与える:あなたはあなたの中にエラーが発生していますSQL構文。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックしてください。正しい構文はIF NOT EXISTS foo '@' localhost 'の近くにあります。1行目の' bar '' IDENTIFIED BY 'bar' ' – Vihung

+0

ERROR 1064(42000) SQL構文。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックしてください。正しい構文については、 'IF EXISTS' foo '@'% ''を1行目で使用してください。 – Vihung

関連する問題