【问题标题】:How do I create a mysql view with a user variable in the name如何使用名称中的用户变量创建 mysql 视图
【发布时间】:2012-01-21 14:52:04
【问题描述】:

我正在使用 mysql 5.5,尝试编写一个脚本来创建用户、视图并授予对这些视图的选择权限。这是我目前所拥有的。

set @type_id := 1;
set @username := 'somecompany';
set @password := 'company1234';
set @prefix := 'somecompany';

CREATE OR REPLACE VIEW CONCAT(@prefix, '_report') AS
SELECT * FROM my_table
WHERE type_id = @type_id;

这不起作用,因为它不是在寻找视图名称的字符串。我通过以下语句解决了这个问题:

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', @username, PASSWORD(@password));

我可以使用类似的技巧来创建视图并将对这些视图的选择授予我创建的用户吗?

【问题讨论】:

    标签: mysql variables view grant


    【解决方案1】:

    您可以使用Prepared Statements 来执行此查询。只需将查询构造为字符串并使用准备好的语句运行它。


    编辑

    MySQL 5.5.12-日志

    SET @s = 'CREATE  VIEW view_actor AS SELECT * FROM sakila.actor;';
    PREPARE stmt2 FROM @s;
    EXECUTE stmt2;
    DEALLOCATE PREPARE stmt2;
    
    
    -- Check CREATE VIEW
    SHOW CREATE VIEW view_actor;
    
    CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `view_actor` AS select `sakila`.`actor`.`actor_id` AS `actor_id`,`sakila`.`actor`.`first_name` AS `first_name`,`sakila`.`actor`.`last_name` AS `last_name`,`sakila`.`actor`.`last_update` AS `last_update` from `sakila`.`actor`
    

    【讨论】:

    • dev.mysql.com/doc/refman/5.5/en/… 在 5.5 的用户手册中,它有一个可用于准备语句的查询列表。在我能找到的任何东西中,创建视图都不能与准备好的语句一起使用,而且它在工作台中对我不起作用。
    • 是的,确实,CREATE VIEW 仍然不受支持;-( 您只能使用 INSERT INTO 添加新用户或使用 CREATE USER 语句。另一种方法是在应用程序中进行。
    • 停止!!!我发现了非常有趣的事情。 CREATE VIEW 可以与准备好的语句一起使用。我已经设法在 MySQL 5.5 上做到了,一切都很好。
    • 您的意思是用您发布的示例编辑我的帖子吗?我想感谢您的回答,但是对于将来试图找到此答案的人来说,这将更加令人困惑。在我接受之前,您能否将示例代码移至您的答案?
    • 哦,对不起。我不小心将它添加到您的问题中;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2013-04-12
    相关资源
    最近更新 更多