MySQL トリガーは CHECK 制約をエミュレートできますか?
他の RDBMS とは異なり、MySQL は CHECK 制約を完全にはサポートしません。ただし、代わりにトリガーが提供されます。従来のトリガーはエラーを返すのではなくデフォルト値を設定するため、ユーザーは CHECK 制約のような条件を強制してエラーを返すトリガーを作成できるかどうか疑問に思っていました。
エラーを返すトリガーの作成
答えは「はい」です。このようなトリガーの構築方法は次のとおりです。
更新操作の場合:
DELIMITER $$ CREATE TRIGGER chk_stats1 BEFORE UPDATE ON stats FOR EACH ROW BEGIN IF NEW.month > 12 THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Cannot add or update row: only'; END IF; END; $$
このトリガーは、「統計」テーブルの更新試行をインターセプトします。新しいデータの「month」値が 12 を超えると、SQLSTATE エラーが発生し、意味のあるエラー メッセージが設定されます。
挿入操作の場合:
DELIMITER $$ CREATE TRIGGER chk_stats BEFORE INSERT ON stats FOR EACH ROW BEGIN IF NEW.month > 12 THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Cannot add or update row: only'; END IF; END; $$
同様に、このトリガーは、データを 'stats' テーブルに挿入する前に 'month' の値をチェックします。
CHECK 制約のエミュレート
これらのトリガーは、' を強制することで CHECK 制約を効果的にエミュレートします。月の範囲。 「month」値が 12 を超えるデータを更新または挿入しようとすると、エラーが発生します。これにより、無効な値がデータベースに保存されるのを防ぎ、データの整合性が確保されます。
以上がMySQL トリガーは CHECK 制約を模倣できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。