sql - [Mysql 有类似预处理器的工具吗?

标签 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'

最佳答案

大多数 SQL 数据库都有某种绑定(bind)变量,您可以为此使用。

例如,在 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;

关于sql - [Mysql 有类似预处理器的工具吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282776/

相关文章:

java - 用特定值更新不同的列值

php - 在php中传递变量

PHP:如何防止包含/要求在循环中添加数字?

mysql - 是否有可能找出两个 mysql 转储文件之间的区别?

variables - IntelliJ : How to auto-highlight variables like in Eclipse

javascript - 如何在函数名中连接变量?

mysql - 奇怪的计算

sql - 从单列中选择多行到单行

mysql - 需要mysql查询/配置优化

java - 当服务器时区不是 UTC 时,从 Java 中的 MySQL 检索 UTC DATETIME 字段