2

Bで新しい行を挿入したり、既存の行を編集したりしたときに、Aで「last_seen」列が更新されるようにしたい.

これは私がこれまでに持っているものです:

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」列を更新します。

4

2 に答える 2

2

JOIN両方のテーブルにする必要はありません。UPDATE ステートメントの節で使用するだけNEW.card_noです。WHERE

AFTER INSERT(と) の両方AFTER 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のデモです

于 2013-07-26T06:15:51.027 に答える
0

現在更新されている 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

于 2013-07-26T06:13:21.617 に答える