mysql触发语法错误

mysql触发语法错误,mysql,syntax,triggers,Mysql,Syntax,Triggers,我在创建MySQL触发器时遇到问题。触发器使用replace,因此当一行被替换时,它将读取该行并将信息保存在另一个表中。如果在跟踪表中插入新行,则信息不会保存在另一个表中,因为该行不存在。如果跟踪行已经存在,我只需要保存它 DROP TRIGGER IF EXISTS savetracking; CREATE TRIGGER savetracking BEFORE REPLACE ON 'orderstest.tracking' FOR EACH ROW BEGIN DECLARE orde

我在创建MySQL触发器时遇到问题。触发器使用replace,因此当一行被替换时,它将读取该行并将信息保存在另一个表中。如果在跟踪表中插入新行,则信息不会保存在另一个表中,因为该行不存在。如果跟踪行已经存在,我只需要保存它

DROP TRIGGER IF EXISTS savetracking;

CREATE TRIGGER savetracking BEFORE REPLACE ON 'orderstest.tracking'
FOR EACH ROW 
BEGIN
DECLARE orderid INTEGER;

IF NEW.invno != '' THEN
SET orderid = (SELECT orderid FROM order_header WHERE invno = NEW.invno);
INSERT INTO comments (id, date_time, type, comments) VALUES 
            (orderid, SYSDATE(), \"O\", \"Previous Tracking: USPS - OLD.trackno\");
ENDIF;
END; 
这是我得到的错误:

1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在orderstest.tracking上的REPLACE附近使用的正确语法 每行 开始 在第1行声明orderid整数'

我正在使用PHPMyAdmin尝试添加触发器

MySQL版本为软件版本:5.0.95-rs

谢谢

史蒂夫

我把扳机换成了这个

DROP TRIGGER IF EXISTS savetracking;

CREATE TRIGGER savetracking BEFORE INSERT ON orderstest.tracking
FOR EACH ROW 
BEGIN
DECLARE orderid INTEGER;
DECLARE otrackno INTEGER;

SET otrackno = (SELECT trackno FROM tracking WHERE invno = NEW.invno);
IF otrackno != '' THEN
SET orderid = (SELECT orderid FROM order_header WHERE invno = NEW.invno);
INSERT INTO comments (id, date_time, type, comments) VALUES 
            (orderid, SYSDATE(), 'O', 'Previous Tracking: USPS - otrackno');
DELETE FROM trackno WHERE invno = NEW.invno;

ENDIF;
结束

我现在得到的错误是

1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第4行附近使用的正确语法没有替换触发器。您可以选择插入、更新或删除

如果执行替换,将导致表上的DELETE和INSERT触发器同时运行

此外,不能像现在这样引用表名

ON 'orderstest.tracking'
应该是

ON `orderstest`.`tracking`

在您尝试定义包含复合语句的触发器之前,您应该先了解它。

我想向比尔道歉。他是对的。我需要使用分隔符,即使我使用的是PHPMyAdmin。他还说得对,我不能在触发器中使用replace。我现在已经解决了这个问题,为触发器使用insert并更改了触发器中的逻辑。谢谢比尔。

请至少显示相关部分的表架构这是一个语法错误,所以表结构实际上并不相关-这可能是由于行中的神奇引号,如果NEW.invno!=''然后你是用文字处理器输入还是复制的?使用普通引号:。感谢您的建议。你引用的话是正确的,我是从谷歌文档复制的。我尝试了正确的引用,但在顶部的同一行中仍然会出现相同的错误。它似乎被DECLARE阻塞了?如果您阅读这个问题,您将看到我使用的是PHPMyAdmin,因此不需要指定分隔符。我尝试使用INSERT代替REPLACE,但错误仍然发生在同一位置。谢谢,我很高兴能提供帮助。顺便说一句,StackOverflow上的习惯是对帮助您的答案投上一票,然后单击正确答案旁边的“接受答案”复选标记。
ON `orderstest`.`tracking`