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