MySQL 速習チュートリアル

MySQL CHECK 制約

1. MySQL CHECK 制約の概要

CHECK 制約は、カラム(列)に格納される値が特定の条件を満たしているかを確認するために使用されます。

CHECK 制約は、入力されたデータを TRUE または FALSE で評価します。

  • データが TRUE と評価された場合、操作は正常に実行されます。
  • データが FALSE と評価された場合、その INSERT(挿入)または UPDATE(更新)操作全体が中止(アボート)され、エラーが返されます。

2. CREATE TABLE 時の CHECK 設定

テーブルを作成する際に、"Age"(年齢)カラムに対して CHECK 制約を定義する SQL は以下の通りです。

以下の例では、CHECK 制約によって "Age" カラムの値が18以上でなければならないことを保証しています。

実行例

/* Persons テーブルを作成し、年齢が18歳以上であることを強制する */
CREATE TABLE Persons (
    ID int PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int CHECK (Age >= 18)
);

2.1 CHECK 制約への命名と複数カラムへの適用

制約に特定の名前を付けたり、複数のカラムを組み合わせた条件で CHECK 制約を定義したりする場合は、以下の構文を使用します。

実行例

/* 制約名を "chk_PersonAge" とし、年齢と都市の組み合わせ条件を設定 */
CREATE TABLE Persons (
    ID int PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255),
    CONSTRAINT chk_PersonAge CHECK (Age >= 18 AND City = 'Sandnes')
);

3. ALTER TABLE 時の CHECK 設定

すでに作成済みのテーブルの "Age" カラムに対して CHECK 制約を追加するには、以下の SQL を使用します。

実行例

/* 既存の Persons テーブルに CHECK 制約を追加 */
ALTER TABLE Persons
ADD CHECK (Age >= 18);

3.1 制約名と複数カラムの設定 (ALTER TABLE)

既存のテーブルに対し、制約名を指定して複数カラムにまたがる制約を追加する場合は、以下の構文となります。

実行例

/* 既存テーブルに対し、名前付きの複合 CHECK 制約を追加 */
ALTER TABLE Persons
ADD CONSTRAINT chk_PersonAge CHECK (Age >= 18 AND City = 'Sandnes');

4. CHECK 制約の削除

定義した CHECK 制約を削除するには、以下の SQL を実行します。

実行例

/* 制約名(chk_PersonAge)を指定して制約を削除 */
ALTER TABLE Persons
DROP CHECK chk_PersonAge;