我不知道如何解决它:
drop trigger if exists insertusuario;
CREATE TRIGGER insertusuario
BEFORE INSERT ON usuario
FOR EACH ROW
begin
GRANT ALL ON *.* TO ',new.nombre,'@'%' IDENTIFIED BY ',new.contraseña,' WITH GRANT OPTION;
end;
最佳答案
如下更改您的Grant
命令语句准备:
SELECT
CONCAT( 'GRANT ALL ON *.* TO ''',
new.nombre,
'''@''%'' IDENTIFIED BY ''',
new.contraseña,
''' WITH GRANT OPTION'
) INTO @temp_grant_sql_string;
使用准备好的语句执行此生成的授予语句;
PREPARE stmt FROM @temp_grant_sql_string;
EXECUTE stmt;
deallocate prepare stmt; -- or drop prepare stmt;
让我希望您在注册存储过程之前了解
delimiter
部分。在触发器定义之前使用:
delimiter $$
。和,在触发器定义后使用:
delimiter ;
重置为默认值。最后,您的触发器应如下所示:
delimiter $$;
drop trigger if exists insertusuario
$$
CREATE TRIGGER insertusuario BEFORE INSERT ON usuario
FOR EACH ROW BEGIN
SELECT
CONCAT( 'GRANT ALL ON *.* TO ''',
new.nombre,
'''@''%'' IDENTIFIED BY ''',
new.contraseña,
''' WITH GRANT OPTION'
) INTO @temp_grant_sql_string;
PREPARE stmt FROM @temp_grant_sql_string;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; -- or DROP PREPARE stmt;
END;
$$
delimiter ;
关于mysql - 意外的end_of_input输入,期望为';' MySQL的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21185623/