MySQL Workbench触发器无法运行,VALUES附近语法报错求助
搞定MySQL触发器VALUES附近的语法错误
咱先捋捋你代码里的几个明显坑,这些就是导致红色叉号的原因:
混用VALUES和FROM是大忌
你在INSERT语句的VALUES后面加了FROM TopicPending,这完全不符合语法逻辑啊!VALUES子句是用来直接指定要插入的具体值的——这里你要插的就是刚插入到TopicPending里的那条数据,直接用NEW对象取字段就行,根本不需要再去查一次表。条件判断没写对结构
你想只在审核通过(NEW.TopicApproved = 'YES')的时候执行插入,但直接把这个条件扔在语句末尾是不行的,得用IF ... THEN ... END IF;的结构把插入逻辑包起来,MySQL才认这个条件判断。字段名拼写错了两处
仔细看:NEW.Descritpion把Description拼错了(多了个t少了个i),得改成NEW.Description;还有Qustion2把Question的字母顺序搞反了,要改成Question2。这些拼写错误也会导致语法校验失败。语句结尾缺分号
INSERT语句后面必须加分号,触发器逻辑块里的每个语句都得有正确的结束符,不然MySQL会识别不了语句边界。
给你修正后的完整代码,直接用就行:
DELIMITER $$ CREATE TRIGGER PendingPublish AFTER INSERT ON TopicPending FOR EACH ROW BEGIN -- 仅当审核通过时,将数据同步到Topics表 IF NEW.TopicApproved = 'YES' THEN INSERT INTO Topics (Title, Description, Question1, Question2, Question3, Question4, UserID) VALUES (NEW.Title, NEW.Description, NEW.Question1, NEW.Question2, NEW.Question3, NEW.Question4, NEW.UserID); END IF; END;$$ DELIMITER ;
简单说下修正后的逻辑:用IF判断审核状态,符合条件才执行插入;修正了所有拼写错误;去掉了多余的FROM子句;每个语句都补全了分号,语法结构完全合规。
内容的提问来源于stack exchange,提问作者sach jot
相关产品推荐
相关产品推荐

