CHECK 制約は、列の値の範囲を制限するために使用されます。テーブルに CHECK 制約を定義すると、挿入または更新操作を実行することで、制約を満たす値のみをテーブルに追加できます。
サポートされているバージョン
データベースエンジンのバージョンは MySQL 8.0 で、インスタンスのバージョンは polardb-2.5.0_5.4.20-20241224_xcluster8.4.20-20241213 以降です。
インスタンスのバージョン番号の詳細については、「リリースノート」をご参照ください。
インスタンスのバージョンを表示する方法の詳細については、「インスタンスのバージョンの表示と更新」をご参照ください。
構文
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]CHECK 制約の構文は、MySQL が提供する CHECK 制約の構文と同じです。詳細については、「CHECK Constraints」をご参照ください。
パラメータ:
パラメータ | 説明 |
CONSTRAINT [symbol] | 制約の名前。名前を指定しない場合、システムは |
CHECK (expr) | 制約条件。 |
[NOT] ENFORCED | CHECK 制約を無効にするかどうかを指定します。デフォルトでは、CHECK 制約は有効になっています。 |
例
CHECK 制約を追加する
PolarDB-X では、CREATE TABLE 文と ALTER TABLE 文を使用して、テーブルまたは列に CHECK 制約を追加できます。
テーブルレベルの制約: これらの制約は、個々の列定義の外側で定義され、テーブル内の 1 つ以上の列に適用できます。
列レベルの制約: これらの制約は、個々の列定義内で定義され、その特定の列の値にのみ適用されます。
CREATE TABLE文にCHECK制約を追加します。例:CREATE TABLE t1 ( CHECK (c1 <> c2), /* テーブル制約 */ c1 INT CHECK (c1 > 10), /* 列制約 */ c2 INT CONSTRAINT c2_positive CHECK (c2 > 0), c3 INT CHECK (c3 < 100), CONSTRAINT c1_nonzero CHECK (c1 <> 0), CHECK (c1 > c3) );ALTER TABLE文にCHECK制約を追加します。例:-- 列制約 ALTER TABLE t1 ADD COLUMN c4 INT CHECK (c4 > 0); -- テーブル制約 ALTER TABLE t1 ADD CHECK (c4 < c3); ALTER TABLE t1 ADD CONSTRAINT `c4_maximize` CHECK (c4 < 20);CHECK制約を表示します。SHOW CREATE TABLE t1;結果例:
CREATE TABLE `t1` ( `c1` int DEFAULT NULL, `c2` int DEFAULT NULL, `c3` int DEFAULT NULL, `c4` int DEFAULT NULL, CONSTRAINT `c1_nonzero` CHECK (`c1` <> 0), CONSTRAINT `c2_positive` CHECK (`c2` > 0), CONSTRAINT `c4_maximize` CHECK (`c4` < 20), CONSTRAINT `t1_chk_1` CHECK (`c1` <> `c2`), CONSTRAINT `t1_chk_2` CHECK (`c1` > 10), CONSTRAINT `t1_chk_3` CHECK (`c3` < 100), CONSTRAINT `t1_chk_4` CHECK (`c1` > `c3`), CONSTRAINT `t1_chk_5` CHECK (`c4` > 0), CONSTRAINT `t1_chk_6` CHECK (`c4` < `c3`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_general_ci
CHECK 制約を有効または無効にする
CHECK 制約に
NOT ENFORCEDオプションを指定すると、制約は有効になりません。データが挿入または更新されるときに、システムは指定された制約に対してデータをチェックしません。例:ALTER TABLE t1 ADD CHECK c4_c1_not_equal (c4 <> c1) NOT ENFORCED;NOT ENFORCEDオプションを指定しない場合、またはENFORCEDオプションを指定した場合、システムはすべての新しい挿入と更新を制約に対してチェックします。ただし、既存のデータは、更新されない限りチェックされません。ALTER TABLE文を使用して、CHECK制約の有効化ステータスを調整できます。例:
ALTER TABLE t1 ALTER CONSTRAINT c1_nonzero NOT ENFORCED;CHECK 制約を削除する
CHECK 制約を削除する場合は、その名前を指定する必要があります。例:
ALTER TABLE t1 DROP CONSTRAINT t1_chk_1;