SQL语法错误创建触发器。

6

我想创建触发器,已经编写了这个查询语句,但是无法执行。请检查我的查询语句。

CREATE
    TRIGGER 'blog_after_insert' AFTER INSERT 
    ON 'blog' 
    FOR EACH ROW BEGIN

        IF NEW.deleted THEN
            SET @changetype = 'DELETE';
        ELSE
            SET @changetype = 'NEW';
        END IF;

        INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype);

我遇到了这个错误。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''blog_after_insert' AFTER INSERT 
    ON 'blog' 
    FOR EACH ROW BEGIN

        IF NEW.del' at line 2 

2
只需删除引号即可。 - SMA
只使用单引号来表示字符串和日期常量。 - Gordon Linoff
2个回答

12
请运行这个查询。
DELIMITER $$
CREATE
    TRIGGER blog_after_insert  AFTER INSERT 
    ON blog 
    FOR EACH ROW BEGIN

        IF NEW.deleted THEN
            SET @changetype = "DELETE";
        ELSE
            SET @changetype = "NEW";
        END IF;

        INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype);

    END$$
DELIMITER ;

0

单引号 (') 表示字符串字面量 - 对象名称,如触发器和表应使用前引号或根本不使用引号:

CREATE
    TRIGGER blog_after_insert AFTER INSERT -- here
    ON blog -- and here
    FOR EACH ROW BEGIN
    -- rest of code...

我已经按照你建议的修改了代码,但仍然出现错误,请帮我检查一下我的查询语句哪里有误———CREATE TRIGGER blog_after_insert AFTER INSERT -- 这里 ON blog -- 还有这里 FOR EACH ROW BEGIN如果 NEW.deleted 为真,则设置 @changetype = 'DELETE';否则,设置 @changetype = 'NEW'。将 (NEW.id, @changetype) 插入到 audit 表中。 - Harpreet Singh
我在特殊字符@中加入了空格,因为Stack Overflow将其视为用户。 - Harpreet Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接