Mysql 触发器中止插入

Mysql 触发器中止插入,mysql,triggers,Mysql,Triggers,当我创建这个触发器时,表Recension中的插入不再起作用 CREATE DEFINER=`root`@`localhost` TRIGGER `premium` AFTER INSERT ON `recensione` FOR EACH ROW BEGIN DECLARE n INT; DECLARE g VARCHAR(255); SET n = (SELECT COUNT(*) FROM recensione WHERE id_autore=NEW.id_autore); SET g =

当我创建这个触发器时,表Recension中的插入不再起作用

CREATE DEFINER=`root`@`localhost` TRIGGER `premium` AFTER INSERT ON `recensione` FOR EACH ROW BEGIN
DECLARE n INT;
DECLARE g VARCHAR(255);
SET n = (SELECT COUNT(*) FROM recensione WHERE id_autore=NEW.id_autore);
SET g = (SELECT gruppo FROM utente WHERE id=NEW.id_autore);
IF (n >= 20 AND g != `Amministratore`) THEN
UPDATE utente AS u SET u.gruppo=`Premium` WHERE u.id=NEW.id_autore;
END IF;
END

感谢您提供关于您当前工作的状态报告。我不确定你是否在问问题,但如果你是,这句话看起来是错的

IF (n >= 20 AND g != `Amministratore`) THEN
                     ^              ^ 
看起来您希望将局部变量
g
的内容与文字值进行比较,但文字值包含在单引号中,而不是反引号中。反勾号用于标识符(表名、列名等)

这一行也是如此:

UPDATE utente AS u SET u.gruppo=`Premium` WHERE u.id=NEW.id_autore;
                                ^       ^
看起来您希望将该列设置为文字值,而不是
utete
表中另一列的值

UPDATE utente AS u SET u.gruppo='Premium' WHERE u.id=NEW.id_autore;
                                ^       ^

非常感谢你。对不起,我的英语不好!
UPDATE utente AS u SET u.gruppo='Premium' WHERE u.id=NEW.id_autore;
                                ^       ^