(与[{3}}相关,但与Syntax error with emulating "create user if not exists"分开。)
是否有可能在MySQL中实现通用/动态添加用户(即模拟其他DBMS包含的sp_adduser
系统过程)的功能?
MySQL不支持以下if [not] exists
语法,请参阅http://bugs.mysql.com/bug.php?id=15287:
create user if not exists 'foo'@'%' identified by password 'bar';
它也不支持:
drop procedure if exists create_user_if_not_exists;
delimiter ||
create procedure create_user_if_not_exists
( sUser varchar(60),
sHost varchar(16),
sPassword varchar(255) )
begin
-- ensure user does not yet exist
if (select ifnull((select 1
from mysql.user
where User = sUser
and Host = sHost), 0) = 0) then
set @createUserText = concat('create user ''', sUser, '''@''', sHost, ''' identified by ''', sPassword, ''';');
prepare createUserStatement FROM @createUserText;
execute createUserStatement;
deallocate prepare createUserStatement;
end if;
end ||
delimiter ;
因为如果你试图调用上述程序:
call create_user_if_not_exists ( 'foo', '%', 'bar' );
你得到了可爱的信息:
This command is not supported in the prepared statement protocol yet
以下作品,但显然不是特别可重复使用:
drop procedure if exists create_user_if_not_exists;
delimiter ||
create procedure create_user_if_not_exists
( )
begin
if (select ifnull((select 1
from mysql.user
where User = 'foo'
and Host = '%'), 0) = 0) then
create user 'foo'@'%' identified by password 'bar';
end if;
end ||
delimiter ;
答案 0 :(得分:0)
对不起,我只是在说你正在谈论数据库用户。不是应用程序用户。
您可能会喜欢INSERT INTO ...... ON DUPLICATE KEY UPDATE ......=VALUE(.....)
声明。
我在我的常规保存对象方法中使用它,使用它我不必关心用户是否存在它将在我提交之后(并且是最新的)。