0

我正在尝试创建一个触发器,它将做两件事:

  1. UPDATE在完成之前将所有内容从表 X 中的一行复制到表 Y 中的一行
  2. 将表 X 中一行的一列复制到表 Y 中UPDATEfrom no 之后的一行。1 完成

这是我到目前为止所拥有的:

delimiter //
create trigger log
before update on opnaar
for each ROW 

    begin
    set @a = opnaar.id;
    set @c = opnaar.initials;
    set @d = opnaar.revised;
    set @f = opnaar.course;
        insert into log(id,init_old,date_old,date_new,course) values (@a,@c,@d,NOW(),@f);
        end;

    after update on opnaar
    for each ROW
    begin
        set @e = opnaar.initials;
            insert into log(init_new) values (@e);
            end;

但我认为不可能只向表中已经存在的行添加一个值。至少,不是我试图这样做的方式。我应该把它after update放在第一个动作中吗?

示例:我有这个内容:

在此处输入图像描述

我想将 、 和 复制courserevised另一个initialsid。这就是我的第一个动作应该做的。

在老师更新了该表中的某些内容后,应该将新的首字母(但与旧的首字母在同一列)复制到表 Y。这就是我的第二个动作应该做的。

我究竟做错了什么?

谢谢你。

4

1 回答 1

0

查看CREATE TRIGGER语法。不能在一个触发器中指定 AFTER 和 BEFORE 选项。

  • 因此,您应该创建两个单独的触发器。
  • 如果您想优化代码并组合触发器的主体,那么您可以编写一个存储过程并从触发器中调用它。
于 2012-09-17T06:37:14.887 回答