SQL CHECK 制約
CHECK 制約は、カラムに入力される値が特定の条件を満たしているかを確認するために使用されます。
CHECK 制約は、データを TRUE または FALSE で評価します。評価結果が TRUE であれば操作は正常に実行されます。評価結果が FALSE の場合、その INSERT または UPDATE 操作全体が中止され、エラーがスローされます。
1. CREATE TABLE における CHECK 制約
以下の SQL は、「Persons」テーブルの作成時に「Age」カラムに対して CHECK 制約を定義しています。
この CHECK 制約により、「Age」カラムの値は必ず 18 以上でなければならないことが保証されます。
CREATE TABLE Persons (
ID int PRIMARY KEY, -- IDを主キーに設定
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age >= 18) -- 年齢が18歳以上であることを保証
);2. CHECK 制約への命名と複数カラムへの定義
CHECK 制約に任意の名前を付けたり、複数のカラムにまたがる制約を定義したりする場合は、以下の SQL 構文を使用します。
CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
-- chk_PersonAge という名前で、Age が 18 以上かつ City が 'Sandnes' である制約を定義
CONSTRAINT chk_PersonAge CHECK (Age >= 18 AND City = 'Sandnes')
);3. ALTER TABLE における CHECK 制約
テーブルが既に作成された後で、後から「Age」カラムに CHECK 制約を追加する場合は、以下の SQL を使用します。
ALTER TABLE Persons
ADD CHECK (Age >= 18);4. ALTER TABLE での命名と複数カラム制約の追加
既存のテーブルに対して制約名を指定し、複数のカラムに対して CHECK 制約を追加する構文は以下の通りです。
ALTER TABLE Persons
ADD CONSTRAINT chk_PersonAge CHECK (Age >= 18 AND City = 'Sandnes');5. CHECK 制約の削除
設定された CHECK 制約を削除するには、使用している RDBMS(データベース管理システム)に合わせて以下の SQL を実行します。
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_PersonAge; -- 制約名を指定して削除MySQL:
ALTER TABLE Persons
DROP CHECK chk_PersonAge; -- MySQLでは DROP CHECK 構文を使用