[My] SQL是否具有类似预处理器的工具?

时间:2009-08-15 20:34:21

标签: sql mysql variables preprocessor sql-scripts

我正在为我的第一个数据库驱动的应用程序编写一个小型部署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'

2 个答案:

答案 0 :(得分: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用户语句一起使用,你可以随时直接修改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;

答案 1 :(得分:0)

你当然可以这样做:

SET @user='foo';