特定の条件が満たされた場合に挿入を実行したくない(トランザクションはロールバックする必要がある)状況があります。このロジックはアプリケーションコードで記述できますが、何らかの理由でMySQL自体で記述しなければなりません(たとえば、異なる言語で記述されたクライアントはこのMySQL InnoDBテーブルに挿入されます)[これは別の説明です]。
テーブル定義:
CREATE TABLE table1(x int NOT NULL);
トリガーは次のようになります。
CREATE TRIGGER t1 BEFORE INSERT ON table1
FOR EACH ROW
IF (condition) THEN
NEW.x = NULL;
END IF;
END;
私はそれが(未テスト)と書くこともできると推測しています:
CREATE TRIGGER t1 BEFORE INSERT ON table1
FOR EACH ROW
IF (condition) THEN
ROLLBACK;
END IF;
END;
しかし、これは機能しません:
CREATE TRIGGER t1 BEFORE INSERT ON table1 ROLLBACK;
次のことが保証されます。
- DBは常にMySQLになります
- テーブルタイプは常にInnoDBになります
- そのNOTNULL列は、常にそのままになります
質問:最初の方法で不快なことはありますか?