【问题标题】:Does [My]SQL have a Pre-Processor-like Facility?[Mysql 有类似预处理器的设施吗?
【发布时间】:2009-08-16 04:54:23
【问题描述】:

我正在为我的第一个数据库驱动应用程序编写一个小型部署 SQL 脚本。

在这个过程中,我发现自己重复了很多,例如:

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

如果我可以使用变量或宏来替换经常出现的数据,那就太棒了。是否可以实现类似下面的sn-p?

#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 mysql variables preprocessor sql-scripts


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      你当然可以这样做:

      SET @user='foo';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 2020-01-11
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多