MySQL触发器语法错误

MySQL触发器语法错误,mysql,triggers,innodb,Mysql,Triggers,Innodb,使用InnoDB在MySQL 5.5.9上运行 我创建了以下触发器: CREATE TRIGGER TRIGGER_Products_Insert AFTER INSERT ON Products FOR EACH ROW BEGIN UPDATE Products SET current = 0 WHERE id = new.id AND current = 1 AND autonumber <> new.autonumber END; 创建触发器产品\u插

使用InnoDB在MySQL 5.5.9上运行

我创建了以下触发器:

CREATE TRIGGER TRIGGER_Products_Insert
AFTER INSERT ON Products

FOR EACH ROW
BEGIN
UPDATE Products
SET current = 0
WHERE   id = new.id
    AND current = 1
    AND autonumber <> new.autonumber
END;
创建触发器产品\u插入
在产品上插入后
每行
开始
更新产品
设置电流=0
其中id=new.id
电流=1
和自动编号new.autonumber
结束;
MySQLWorkbench在最后一行显示了一个语法错误,执行此操作将抛出以下错误

错误代码:1064。您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第11行“END”附近使用的正确语法


我的错误在哪里?

您缺少一个
在您的
结束之前
关键字:

CREATE TRIGGER TRIGGER_Products_Insert
AFTER INSERT ON Products

FOR EACH ROW
BEGIN
UPDATE Products
SET current = 0
WHERE   id = new.id
    AND current = 1
    AND autonumber <> new.autonumber;
END;
创建触发器产品\u插入
在产品上插入后
每行
开始
更新产品
设置电流=0
其中id=new.id
电流=1
和自动编号new.autonumber;
结束;

分隔符|
在产品上插入后创建触发器产品插入
每行开始
更新产品
设置电流=0
其中id=new.id
电流=1
和自动编号new.autonumber;
结束;
|
定界符;

不起作用,现在最后一行和最后第二行都出现错误。这是可行的,但我不知道为什么需要使用
分隔符。因为
开始。。。END
是触发器的“主体”。因此,它必须是当前查询的一部分<代码>
默认是delimeter,所以当MySQL到达它时,它认为这是查询的结束,无法解析它。此外,您必须在触发器的“主体”中放置delimeters,因为它在另一方面是无效的。所以,为了满足这个要求,我们需要在触发器的“body”和查询本身中使用两个不同的delimeter。对不起,我的英语太差了,无法更好地描述这件不明显的事情……这里更好地描述了这件事:(第三段,以“使用多个语句要求客户能够”
DELIMITER |

CREATE TRIGGER TRIGGER_Products_Insert AFTER INSERT ON Products
    FOR EACH ROW BEGIN
        UPDATE Products
        SET current = 0
        WHERE   id = new.id
            AND current = 1
            AND autonumber <> new.autonumber;
    END;
|

DELIMITER ;