1

初めてのデータベース駆動型アプリ用の小規模な展開 SQL スクリプトを作成しています。

その過程で、私は自分自身を何度も繰り返すことに気づきまし。例えば:

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

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

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

GRANT USAGE ON *.* TO USER@HOST
DROP USER USER@HOST
CREATE USER USER@HOST IDENTIFIED BY 'password'
4

2 に答える 2

1

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

たとえば、PostgreSQL では、plsql で \set コマンドを使用します。

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

ただし、MySQL にそのようなものがあるかどうかはわかりません。変数があり、ホストとユーザーは文字列であるため、次のようなことができる場合があります。

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

drop user @user@@host;
create user @user@@host identified by 'password';

変数が drop および create user ステートメントで機能しない場合は、いつでも 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;
于 2009-08-15T20:54:23.403 に答える
0

あなたは確かに次のようなことができます:

SET @user='foo';
于 2009-08-15T20:43:02.600 に答える