SQL のCHECK句の使い方とは?徹底解説!

こんにちは、阿久梨絵です!
SQL でテーブルを作成するとき、データの制約を設定することができます。
その中でも `CHECK` 句は、特定の条件を満たすデータのみを許可する 重要な機能です。
本記事では、`CREATE TABLE` の `CHECK` 句の基本と活用方法を解説します! 

1. CHECK句とは?

`CHECK` 句は、テーブルに挿入・更新されるデータの値を制約するルール を定義できます。
例えば、年齢を0歳以上に制限する、価格を0円以上にするなどのルールを設定できます。

2. 基本構文

`CREATE TABLE` の `CHECK` 句は、次のように記述します。

CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 0)
);

・このテーブルでは、`age` の値が0以上であることを保証!
・負の年齢(例:`-5`)はエラーになり、保存できません!

もし `CHECK` の条件を満たさないデータを挿入すると、以下のようなエラーが発生します。

INSERT INTO users (id, name, age) VALUES (1, ‘Alice’, -5);
— エラー: CHECK制約違反

3. CHECK句の活用例

① 数値の範囲を指定する

CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) CHECK (price >= 0)
);

価格が0以上であることを保証!
・マイナスの価格は許可されない!

② 複数の条件を組み合わせる

CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
salary DECIMAL(10,2) CHECK (salary > 0 AND salary <= 1000000)
);

給与が0より大きく、100万以下であることを保証!
・極端な数値を防ぎ、適切な範囲に制限!

③ ENUMのような制約をつける

CREATE TABLE orders (
id INT PRIMARY KEY,
status VARCHAR(20) CHECK (status IN (‘pending’, ‘shipped’, ‘delivered’))
);

注文ステータスを `pending` `shipped` `delivered` のみ許可!
・誤った値(例:`canceled`)はエラーになる!

4. CHECK句の注意点

CHECKはデータの一貫性を保つために使う
複雑な条件はトリガーやアプリ側のバリデーションで管理
データベースによってCHECKの動作が異なることがある

例えば、MySQLではCHECK句がサポートされていないバージョンもあるため、代わりに `ENUM` 型や `トリガー` を使うことがあります。

まとめ

活用例SQL記述
年齢を0歳以上に制限CHECK (age >= 0)
価格を0円以上にするCHECK (price >= 0)
給与を適切な範囲にするCHECK (salary > 0 AND salary <= 1000000)
限られたステータスを許可CHECK (status IN ('pending', 'shipped', 'delivered'))

SQL の`CHECK` 句を活用することで、データの不正値を防ぎ、信頼性の高いデータを管理 できます!
ぜひ、自分のプロジェクトに適用してみてください!
阿久梨絵でした!

Verified by MonsterInsights