概要 RDBを使ったユニットテストをするときに、前提条件となるテストデータを用意することがある。 しかし外部キーの制約上、テストしたいことと直接関係ないデータの作成が必要になる状況が発生する。 例えば、テーブルが「親-子-孫」という階層になっているときに、孫に関するテストを書きたいのだが子だけでなく親のデータも必要になるといった感じ。 そういったときには、外部キーを一時的に無効化するという選択肢がある。 ALTER TABLEでTRIGGERを無効化する方法 TRIGGERを無効化することで、制約チェックを走らなくする。 テストデータの準備ができたら、再度有効化すればよい。 -- 無効化 ALTER TABLE child_table DISABLE TRIGGER ALL; -- 有効化 ALTER TABLE child_table ENABLE TRIGGER ALL JavaのDb