チェック制約を処理する場合、MySQL はそれらを無視する場合があります。このため、このような場合にトリガーを効果的に使用して挿入と更新を制御する方法が問題になります。たとえば、「foo」という名前のテーブルには、1 ~ 5 の値のみを受け入れることができる「agency」属性があります。
最初は、この範囲外の値がテーブルに挿入されないようにトリガーが作成されました。
create trigger agency_check before insert on foo for each row begin if (new.agency < 1 or new.agency > 5) then #Do nothing? end if; end
ただし、トリガーは、無効なエージェンシー値を持つ行の挿入または更新を明示的に停止しません。このような動作を実装するには、SIGNAL 構文の使用を検討してください。
create trigger agency_check before insert on foo for each row begin if (new.agency < 1 or new.agency > 5) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'your error message'; end if end
この変更されたトリガーは、指定されたメッセージでエラーをスローするようになり、エージェンシーの値が事前定義された範囲外にある場合に挿入または更新が失敗するようになります。このアプローチは、MySQL でチェック制約を強制するためのより堅牢な方法を提供します。
以上がMySQL のトリガーを使用して無効なデータの挿入または更新を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。