MySQL触发器将表A中的记录插入表B.

时间:2012-08-30 14:41:00

标签: mysql triggers

我无法使用此page作为参考以及此网站上的其他帖子来使用以下代码。我需要创建一个触发器,只要表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 ;

编辑:在上面的伪代码中,我使用$ TableName_ $ FieldName约定来表明列A属于表A,列B属于表B.我应该已经做了更多在我原来的问题中清楚。有人在下面评论我有错误的新指标(应该在表A),但该评论似乎已被删除。有人可以确认吗?谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

试试这个:

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 $$

答案 1 :(得分:1)

您的触发器中有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 语句中出现

{{1}}