🐬
MySQLのCHECK制約とは?
MySQLのCHECK制約は、テーブルに挿入または更新されるデータが特定の条件を満たすことを保証する機能です。MySQL 8.0.16以降で利用可能になりました。
具体例を交えて説明します:
-
基本的な使用方法:
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10,2) CHECK (price >= 0) );
この例では、priceが0以上であることを保証します。
-
複数の条件を持つ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より大きいことを保証します。
-
既存のテーブルにCHECK制約を追加:
ALTER TABLE products ADD CONSTRAINT chk_price_positive CHECK (price >= 0);
この方法で既存のテーブルにCHECK制約を追加できます。
-
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