意外的end_of_input,期待';' MySQL的

时间:2014-01-17 12:07:10

标签: mysql

我不知道如何解决它:

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;

1 个答案:

答案 0 :(得分:1)

更改Grant命令语句准备,如下所示:

   SELECT
     CONCAT( 'GRANT ALL ON *.* TO ''',
             new.nombre,
             '''@''%'' IDENTIFIED BY ''',
             new.contraseña,
             ''' WITH GRANT OPTION'
     ) INTO @temp_grant_sql_string;

使用预准备语句执行此生成的grant语句;

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 ;