【问题标题】:Create trigger to affect specific rows创建触发器以影响特定行
【发布时间】:2013-07-26 05:52:25
【问题描述】:

我希望它做的是在 B 上插入新行或编辑现有行时,具体的 'last_seen' 列将在 A 上更新。

这是我目前所拥有的:

CREATE TRIGGER insert_records
AFTER UPDATE ON loan_records
FOR EACH ROW
Update  temp_card A
INNER JOIN loan_records B
SET A.last_seen = CURRENT_TIMESTAMP
WHERE A.card_no = B.card_no

还有这个

CREATE TRIGGER insert_records2
AFTER INSERT ON loan_records
FOR EACH ROW
Update  temp_card A
INNER JOIN loan_records B
SET A.last_seen =CURRENT_TIMESTAMP
WHERE A.card_no = B.card_no

目前这会更新 A 中的所有“last_seen”列,无论它们是否已更新。

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    您不需要JOIN 两个表。只需在 UPDATE 语句的 WHERE 子句中使用 NEW.card_no

    以下是您的触发器(AFTER INSERTAFTER UPDATE)的外观

    CREATE TRIGGER tg_loan_records_insert
    AFTER INSERT ON loan_records
    FOR EACH ROW
      UPDATE temp_card 
         SET last_seen = NOW()
       WHERE card_no = NEW.card_no;
    
    CREATE TRIGGER tg_loan_records_update
    AFTER UPDATE ON loan_records
    FOR EACH ROW
      UPDATE temp_card 
         SET last_seen = NOW()
       WHERE card_no = NEW.card_no;
    

    这里是SQLFiddle演示

    【讨论】:

      【解决方案2】:

      您应该只引用当前更新的 id。

      CREATE TRIGGER insert_records2
      AFTER INSERT ON loan_records
      FOR EACH ROW
      Update  temp_card A
      INNER JOIN loan_records B
      SET A.last_seen =CURRENT_TIMESTAMP
      WHERE A.card_no = B.card_no and a.id = OLD.id
      

      更新前的详细使用方法,更新后请参考

      http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

      【讨论】:

        猜你喜欢
        • 2011-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        相关资源
        最近更新 更多