ホームページ >データベース >mysql チュートリアル >MySQL トリガーはエラーを返すことで CHECK 制約を模倣できますか?
CHECK 制約を模倣するための MySQL トリガーの利用
MySQL は、他の RDBMS とは異なり、CHECK 制約を理解できますが、強制することはできません。この制限により、トリガーの利用を含む代替アプローチの検討が必要になりました。ただし、これらのトリガーの多くは、エラーを返すのではなく、単にデフォルト値を設定するだけです。
条件が満たされない場合にエラーを返すようにトリガーを構築できますか?
確かに、それは可能です。特定の条件が満たされない場合にエラーを返すトリガーを構築できます。 SIGNAL ステートメントと SET MESSAGE_TEXT ステートメントを利用することで、トリガーは CHECK 制約を効果的にエミュレートできます。
トリガーの実装
次のトリガーを考えてみましょう。これは、以下のことを保証する CHECK 制約をシミュレートします。 「月」フィールドはそれを超えることはできません12:
delimiter $$ create trigger chk_stats 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; $$
このトリガーは更新操作の前に動作し、「月」フィールドの新しい値をチェックします。値が 12 を超えると、SQLSTATE '45000' のエラーが発生し、「行を追加または更新できません: のみ。」
Trigger for Inserts
同様のトリガーを挿入操作に使用できます。
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; $$
このようにトリガーを利用することで、 MySQL の CHECK 制約の機能を効果的に複製して、データの整合性を確保し、無効な値の挿入や更新を防ぐことができます。
以上がMySQL トリガーはエラーを返すことで CHECK 制約を模倣できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。