Unexpected end_of_input, expecting ';' mysql-Collection of common programming errors
Change your Grant
command statement preparation like below:
SELECT
CONCAT( 'GRANT ALL ON *.* TO ''',
new.nombre,
'''@''%'' IDENTIFIED BY ''',
new.contraseña,
''' WITH GRANT OPTION'
) INTO @temp_grant_sql_string;
Use prepared statement to execute this generated grant statement;
PREPARE stmt FROM @temp_grant_sql_string;
EXECUTE stmt;
deallocate prepare stmt; -- or drop prepare stmt;
Let me hope you know about delimiter
part before registering a stored procedure.
Use: delimiter $$
before trigger definition. And,
use: delimiter ;
after trigger definition, to reset to default.
Finally, your trigger should be reading like this:
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 ;