ホームページ > データベース > mysql チュートリアル > MySQL トリガーはエラーを返すことで CHECK 制約を模倣できますか?

MySQL トリガーはエラーを返すことで CHECK 制約を模倣できますか?

Mary-Kate Olsen
リリース: 2024-11-25 00:30:10
オリジナル
735 人が閲覧しました

Can MySQL Triggers Mimic CHECK Constraints by Returning Errors?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート