ホームページ  >  記事  >  データベース  >  MySQL でチェック制約を使用する方法

MySQL でチェック制約を使用する方法

(*-*)浩
(*-*)浩オリジナル
2019-05-07 13:57:0120822ブラウズ

MySQL でチェック制約を使用する方法: 1. チェック制約を設定するフィールドの範囲が狭く、すべての値を列挙する方が簡単な場合は、フィールドの型を enum 型に設定できます。またはセットタイプ。 2. CHECK 制約を設定する必要があるフィールド範囲が大きく、すべての値を列挙することが難しい場合は、制約の代わりにトリガーを使用してデータの有効性を実現します。

MySQL でチェック制約を使用する方法

場合によっては、指定された範囲内でフィールドを入力する必要があります。

例: 性別は「男性」とのみ入力できます。 ' または '女性' '、残高は 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(&#39;5&#39;,&#39;Joe&#39;,&#39;m&#39;,0,&#39;12345243912&#39;,&#39;CS&#39;);
ERROR 1265 (01000): Data truncated for column &#39;Sex&#39; at row 1
mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values(&#39;5&#39;,&#39;Joe&#39;,&#39;男&#39;,0,&#39;12345243912&#39;,&#39;CS&#39;);
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 サイトの他の関連記事を参照してください。

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