Mysql 如何使用动态用户名创建用户?

Mysql 如何使用动态用户名创建用户?,mysql,Mysql,在MySQL脚本中,我希望执行以下操作: SET @username = CONCAT(DATABASE(), "-1@`%`"); CREATE USER @username; 但是我无法解决CREATE USER行中的语法错误 是否有一种方法可以转义内联变量,以便CREATE USER可以拥有一个动态创建的用户?您可以使用以下方法执行此操作: 您可以通过以下方式完成: 不能在CREATE USER语句AFAIK中使用参数。另外,准备好的语句也不是选项。@tombom:为什么不可以?从MyS

在MySQL脚本中,我希望执行以下操作:

SET @username = CONCAT(DATABASE(), "-1@`%`");
CREATE USER @username;
但是我无法解决CREATE USER行中的语法错误

是否有一种方法可以转义内联变量,以便CREATE USER可以拥有一个动态创建的用户?

您可以使用以下方法执行此操作:

您可以通过以下方式完成:


不能在
CREATE USER
语句AFAIK中使用参数。另外,准备好的语句也不是选项。@tombom:为什么不可以?从MySQL v5.1开始就可以使用
CREATE USER
。哦,我试过了,但一开始它不起作用。但这是特权缺失的原因。开始误读错误消息,不要问如何以及为什么:)您不能在
CREATE USER
语句AFAIK中使用参数。另外,准备好的语句也不是选项。@tombom:为什么不?从MySQL v5.1开始就可以使用
CREATE USER
。哦,我试过了,但一开始它不起作用。但这是特权缺失的原因。首先误读错误消息,不要问如何以及为什么:)谢谢@tombom。这在Workbench SQL编辑器中工作得很好,但在从代码创建数据库的脚本中执行它时遇到了问题。我加载db创建脚本文本(包括几个CREATE TABLE语句)并从ADO.net中的命令执行脚本文本。但是只添加了“set@sql=concat(“blah”,“blah”)”行会导致脚本失败。我想我需要逃过“set@sql…”再上一层?终于开始工作了。需要在连接字符串上将“允许用户变量”设置为true。从另一个SO线程中学习。对我来说很不明显。谢谢@tombom。这在Workbench SQL编辑器中工作得很好,但在从代码创建数据库的脚本中执行它时遇到了问题。我加载db创建脚本文本(包括几个CREATE TABLE语句)并从ADO.net中的命令执行脚本文本。但是只添加了“set@sql=concat(“blah”,“blah”)”行会导致脚本失败。我想我需要逃过“set@sql…”再上一层?终于开始工作了。需要在连接字符串上将“允许用户变量”设置为true。从另一个SO线程中学习。对我来说很不明显。
set @sql=concat("create user '", database(), "-haha", "'@'%' identified by 'whatever';");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;

select @sql;

select * from mysql.user where user = 'playground-haha';