使用两个操作创建SQL触发器

时间:2012-09-16 14:18:00

标签: mysql database triggers

我正在尝试创建一个可以做两件事的触发器:

  1. UPDATE完成之前,将表X中的一行复制到表Y中的一行
  2. 将一个列从表X中的一行复制到表Y中的行UPDATE之后。 1完成
  3. 这就是我现在所拥有的:

    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放在第一个动作中吗?

    示例:我有这样的内容:

    enter image description here

    我想将courserevisedinitialsid复制到另一个表格。这就是我的第一个行动应该做的事情。

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

    我做错了什么?

    谢谢。

1 个答案:

答案 0 :(得分:0)

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

  • 因此,您应该创建两个单独的触发器。
  • 如果您想优化代码并组合触发器的主体,那么您可以编写存储过程并从触发器中调用它。