MySQL でチェック制約を使用する方法: 1. チェック制約を設定するフィールドの範囲が狭く、すべての値を列挙する方が簡単な場合は、フィールドの型を enum 型に設定できます。またはセットタイプ。 2. CHECK 制約を設定する必要があるフィールド範囲が大きく、すべての値を列挙することが難しい場合は、制約の代わりにトリガーを使用してデータの有効性を実現します。
場合によっては、指定された範囲内でフィールドを入力する必要があります。
例: 性別は「男性」とのみ入力できます。 ' または '女性' '、残高は 0 より大きい値のみにすることができ、その他の条件もあります。
例: authors テーブルの郵便番号列には 6 桁の郵便番号の入力のみを許可するように要求できます。
プログラムによる制御に加えて、CHECK 制約を使用してデータを標準化することもできます。
ただし:
すべての mysql ストレージ エンジンはチェック制約をサポートしていません。MySQL はチェック句を分析しますが、データの挿入時に無視するため、チェックは機能しません。
この問題を解決する 2 つの方法:
1. CHECK 制約に設定するフィールド範囲が小さく、すべての値をリストする方が簡単な場合は、次のようにすることができます。このフィールドの型は、列挙型 enum() またはコレクション型 set() に設定されます。
たとえば、性別フィールドは次のように設定できますが、列挙値以外の値の挿入は許可されません。
CREATE TABLE `Student` ( `Sno` char(8) NOT NULL, `Sname` varchar(10) NOT NULL, `Sex` enum('男','女') NOT NULL DEFAULT '男', `Age` tinyint(4) NOT NULL DEFAULT '20', `Phonenumber` char(12) DEFAULT NULL, `Sdept` varchar(20) NOT NULL, PRIMARY KEY (`Sno`), UNIQUE KEY `Phonenumber` (`Phonenumber`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. CHECK 制約を設定する必要があるフィールド範囲が大きく、整数や特定の範囲など、すべての値を列挙することが難しい場合は、制約の代わりにトリガーのみを使用できます。データの有効性を達成するため。
DELIMITER $ create trigger studentcheck before insert on Student for each row begin if new.Age<15 or new.Age>30 then set new.Age=20;end if; end $ DELIMITER ;
テスト:
mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values('5','Joe','m',0,'12345243912','CS'); ERROR 1265 (01000): Data truncated for column 'Sex' at row 1 mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values('5','Joe','男',0,'12345243912','CS'); Query OK, 1 row affected (0.00 sec) mysql> select * from Student; +-----+-------+-----+-----+-------------+-------+ | Sno | Sname | Sex | Age | Phonenumber | Sdept | +-----+-------+-----+-----+-------------+-------+ | 4 | nancy | m | 0 | 12345243965 | CS | | 5 | Joe | 男 | 20 | 12345243912 | CS | +-----+-------+-----+-----+-------------+-------+ 2 rows in set (0.00 sec)
性別は「男性」と「女性」の間で選択する必要があることがわかります。選択しないと、年齢が仕様を満たしていない場合、挿入が失敗します。トリガーの有無により、自動的にデフォルトの20に設定されます。
これにより、無効なチェック制約の問題を解決できます。
以上がMySQL でチェック制約を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。