我不知道如何解决它:

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/

10-15 04:08