0

我无法让以下代码工作,使用此页面作为参考以及此站点上的其他帖子。我需要创建一个触发器,该触发器将在表 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。我应该在原始问题中更清楚地说明这一点。有人在下面评论说我在错误的一侧有 NEW 指示器(应该在表 A 上),但该评论似乎已被删除。有人可以确认吗?感谢你的帮助

4

2 回答 2

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

于 2012-08-30T14:45:20.473 回答
1

END;您的触发器中有一个错误(每个都END应该与 a 配对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
于 2012-08-30T14:47:33.433 回答