0

MySqlトリガーは初めてで、学習するだけです。

CREATE TRIGGER MyTrigger
AFTER UPDATE  ON MyTable
FOR EACH ROW
BEGIN
IF (new.field1 < 0 or new.field1 > 5) THEN
    UPDATE new SET new.field1 = old.field1;
END IF;
END;

目標は、更新によって範囲外になった場合に、field1の値を同じに保つことです。ただし、代わりに0に設定されます。何が間違っているのでしょうか。このコードはどのように見えるべきですか?

4

1 に答える 1

-1

うまくいけば始められるはずの例を次に示します。

DELIMITER ~
CREATE TRIGGER `so_13547992_trigger`
BEFORE UPDATE ON `so_13547992`
FOR EACH ROW BEGIN
    IF ( NEW.`field1` < 0 OR NEW.`field1` > 5 ) THEN
        SET NEW.`field1` = OLD.`field1`;
    END IF;
END;
~

なぜそれがうまくいくのでしょうか?まず、トリガーの例は再帰的です。更新によってトリガーされたトリガーで同じテーブルを更新することはできません。

次に、newステートメント内のUPDATEはテーブル名ではないため、明示的に指定する必要があります。

それは正当なトリガーではないようですが、作成しようとするとサーバーは文句を言いませんか?SHOW CREATE TRIGGER `your_trigger`;それが実際に作成され、上に貼り付けたように見えることを確認するために、実際に表示できますか?

例が機能する場合でも、更新しようとしている行ではなく、テーブルのすべての行に対して制約のない更新を実行しようとしているので、WHERE句が必要です。繰り返しになりますが、問題1と2が処理されます。

于 2012-11-25T12:53:07.020 に答える