2009-08-15 13 views
1

私は最初のデータベース駆動型アプリケーション用の小さなデプロイSQLスクリプトを作成しています。プロセスで[My] SQLにプリプロセッサのような機能がありますか?

、私は例えば、たくさんを自分自身を繰り返していることを見つける:

GRANT USAGE ON *.* TO 'foo'@'localhost'; 
DROP USER 'foo'@'localhost'; 
CREATE USER 'foo'@'localhost' IDENTIFIED BY 'password'; 

私は、変数または一般的に発生するデータを置き換えるために、マクロを使用することができればそれは素晴らしいだろう。次のスニペットのようなものを実装することは可能ですか?

SET @user='foo'; 

答えて

1

ほとんどのSQLデータベースは、あなたがそのために使用することができますバインド変数のいくつかの種類があります:

#define USER 'foo'  #or "Type USER = 'foo'" 
#define HOST 'localhost' #or "Type HOST = 'localhost'" 

GRANT USAGE ON *.* TO [email protected] 
DROP USER [email protected] 
CREATE USER [email protected] IDENTIFIED BY 'password' 
0

あなたは確かのような何かを行うことができます。例えば

は、PostgreSQLの中であなたはPLSQLで、\ setコマンドを使用します。

\set user = foo 
drop user :user; 
create user :user identified by 'password'; 

はしかし、私は、MySQLはそのような何かを持っているかどうかわからないです。これは、変数を持っている、とホストとユーザーが文字列であるから、あなたはこのような何かを行うことができるかもしれない:

select @user = 'foo'; 
select @host = 'localhost; 

drop user @[email protected]@host; 
create user @[email protected]@host identified by 'password'; 

変数がドロップで動作し、ユーザー文を作成していない場合、あなたは常に変更することができますmysql.userテーブルを直接、ちょうどflush privilegesを実行することを忘れないでください。

insert into user values(host,@user,PASSWORD('some_pass'), 
     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); 
flush privileges; 
関連する問題