🐬

MySQLのCHECK制約とは?

2024/12/24に公開

MySQLのCHECK制約は、テーブルに挿入または更新されるデータが特定の条件を満たすことを保証する機能です。MySQL 8.0.16以降で利用可能になりました。

具体例を交えて説明します:

  1. 基本的な使用方法:

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

    この例では、priceが0以上であることを保証します。

  2. 複数の条件を持つCHECK制約:

    CREATE TABLE employees (
      id INT PRIMARY KEY,
      age INT,
      salary DECIMAL(10,2),
      CONSTRAINT chk_employee CHECK (age >= 18 AND salary > 0)
    );
    

    この例では、従業員の年齢が18歳以上で、給与が0より大きいことを保証します。

  3. 既存のテーブルにCHECK制約を追加:

    ALTER TABLE products
    ADD CONSTRAINT chk_price_positive CHECK (price >= 0);
    

    この方法で既存のテーブルにCHECK制約を追加できます。

  4. CHECK制約の削除:

    ALTER TABLE products
    DROP CONSTRAINT chk_price_positive;
    

    不要になったCHECK制約を削除する方法です。

注意点:

  • CHECK制約は、INSERT、UPDATE、REPLACE、LOAD DATA、LOAD XMLの実行時に評価されます。
  • 非決定性関数、ストアドプロシージャ、サブクエリなどはCHECK制約の条件に使用できません。
  • CHECK制約はNULL値を許容するため、必要に応じてNOT NULL制約も併用しましょう。

CHECK制約を使用することで、データの整合性を保ち、無効なデータの挿入や更新を防ぐことができます。

Discussion