我无法使用以下代码,使用此页面以及本网站上的其他帖子进行参考。我需要创建一个触发器,每当表a更新时,该触发器就会在表B中插入一条记录。下面的代码显示了我正在尝试的内容;然而,这会产生语法错误(#1064)。我也不清楚是否需要包含"DELIMITER$$"语法。我感谢你的帮助
DELIMITER $$
CREATE TRIGGER MyTrigger
AFTER INSERT
ON TableA
FOR EACH ROW
BEGIN
INSERT INTO TableB SET
TableA_id = NEW.TableB_id,
TableA_date = NEW.TableB_date,
TableA_comment = NEW.TableB_comment;
END;
END $$
DELIMITER ;
EDIT:在上面的伪代码中,我使用$TableName_$FieldName约定来指示列a属于表a,列B属于表B。我应该在最初的问题中更清楚地说明这一点。有人在下面评论说,我的新指标错了(应该在表A上),但该评论似乎已被删除。有人能确认一下吗?感谢您的帮助
试试这个:
DELIMITER $$
CREATE TRIGGER MyTrigger
AFTER INSERT
ON TableA
FOR EACH ROW
BEGIN
INSERT INTO TableB SET
TableB_id = NEW.TableA_id,
TableB_date = NEW.TableA_date,
TableB_comment = NEW.TableA_comment;
END $$
DELIMITER ;
这里的DELIMITER
用于告诉mysql将以下所有;
作为定义的一部分,而不是实际的命令终止。
请注意,就在关闭END $$
之前,我删除了一个不匹配的END;
您的触发器中有一个错误的END;
(每个END
都应该与一个BEGIN
配对)。
就这一点而言,您甚至不需要BEGIN ... END
块,因为触发器只包含一条语句(如果省略了该块,您甚至无需更改语句分隔符,因为CREATE TRIGGER
语句中没有分号):
CREATE TRIGGER MyTrigger AFTER INSERT ON TableA FOR EACH ROW
INSERT INTO TableB SET
TableA_id = NEW.TableB_id,
TableA_date = NEW.TableB_date,
TableA_comment = NEW.TableB_comment