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

MySQL トリガーは CHECK 制約を模倣できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 15:42:02780ブラウズ

Can MySQL Triggers Mimic CHECK Constraints?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。