広告です。クリックいただけると励みになります。

人気記事(昨日)

    2025年06月14日

    SQLのCHECK制約について

    pramod-tiwari-k0lTVz7i5TI-unsplash.jpg

    質問

    SQLのCHECK制約について解説してください


    解答


    SQLの `CHECK` 制約は、テーブルの列に格納されるデータの値に制限(条件)を設けるための仕組みです。
    これにより、不正なデータの挿入や更新を防ぐことができます。


    ■ CHECK制約の基本構文

    ```sql

    CREATE TABLE テーブル名 ( 列名 データ型 CHECK (条件式) );

    ```

    または、テーブル定義の最後に列をまたいだ条件を指定することも可能です。


    ```sql

    CREATE TABLE テーブル名 ( ... CHECK (条件式) );

    ```


    ■ 具体例

    ① 年齢を0〜150歳に制限する

    ```sql

    CREATE TABLE Person
    ( name VARCHAR(100),
    age INT CHECK (age >= 0 AND age <= 150) );

    ```

    → これにより、マイナスの年齢や151歳以上は登録できません。


    ② 商品価格が0以上であることを保証

    ```sql

    CREATE TABLE Product
    ( id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    price NUMERIC(10, 2) CHECK (price >= 0) );

    ```

    → `price` 列にマイナスの価格は入力不可。


    ③ 複数列を使った条件(例:割引価格は通常価格以下)

    ```sql

    CREATE TABLE Item
    ( name TEXT,
    price INT,
    discount_price INT,
    CHECK (discount_price <= price) );

    ```

    ■ ALTER TABLEで後から追加も可能

    ```sql

    ALTER TABLE Person
    ADD CHECK (age <= 150);

    ```

    ■ 注意点・制約

    内容説明
    データ整合性の確保不正な値の登録を防げる
    NULLには適用されない`CHECK (age > 0)` でも `age = NULL` は通る(`NULL > 0` は評価できないため)
    複雑なロジックには不向きテーブルをまたぐ制約(他のテーブルとの関係)は `CHECK` ではできない(→トリガや外部キーを使う)
    データベースによって制限あり一部のRDBMS(特に古いMySQL)では `CHECK` が無視されることもあった(※現在のMySQL 8以降は対応)


    ■ 対応している主なRDBMS

    RDBMSCHECK制約
    PostgreSQL○ 完全対応
    MySQL 8.0以降○ 対応(それ以前は無視される)
    SQLite○ 対応
    SQL Server○ 対応
    Oracle○ 対応


    ■ まとめ

    * `CHECK` 制約は列の値に条件を付けるための機能。
    * 整合性を保つために重要だが、他のテーブルとの関係は定義できない。
    * NULLには制限がかからないことに注意。
    * RDBMSによってはサポート状況に違いがあるため、使う際は確認が必要。





    BigQueryではじめるSQLデータ分析 GA4 & Search Console & Googleフォーム対応 [ 木田 和廣 ]

    価格:3080円
    (2025/6/6 10:26時点)
    感想(0件)


    Accessのデータベースのツボとコツがゼッタイにわかる本 2021/2019/Microsoft 365対応 [ 立山秀利 ]

    価格:2420円
    (2025/5/18 14:46時点)
    感想(1件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 08:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする
    この記事へのコメント
    コメントを書く
    コチラをクリックしてください