MariaDBのCHECK CONSTRAINTでデフォルト値を強制する
MariaDBで既存の列にデフォルト値を追加する方法
方法 1: ALTER TABLE ステートメントを使用する
これは、既存の列にデフォルト値を追加する最も一般的な方法です。 以下の構文を使用します。
ALTER TABLE table_name
ALTER COLUMN column_name
SET DEFAULT default_value;
例:
ALTER TABLE customers
ALTER COLUMN age
SET DEFAULT 18;
この例では、customers
テーブルの age
列にデフォルト値 18
を追加します。
方法 2: DEFAULT キーワードを使用する
新しい列を作成するときに、DEFAULT キーワードを使用してデフォルト値を指定できます。 以下の構文を使用します。
CREATE TABLE table_name (
column_name data_type DEFAULT default_value,
...
);
CREATE TABLE customers (
name VARCHAR(255) NOT NULL,
age INT DEFAULT 18
);
この例では、customers
テーブルという名前の新しいテーブルを作成します。 このテーブルには、name
と age
という 2 つの列があります。 name
列は文字列型で、age
列は整数型です。 age
列のデフォルト値は 18
です。
既存の列のすべての値をデフォルト値に更新するには、UPDATE ステートメントを使用できます。 以下の構文を使用します。
UPDATE table_name
SET column_name = DEFAULT;
UPDATE customers
SET age = DEFAULT;
注意事項
- デフォルト値を追加する前に、列が NULL 値を受け入れるかどうかを確認する必要があります。 列が NOT NULL 制約を持っている場合、デフォルト値を追加する前に、その列のすべての値を非 NULL 値にする必要があります。
- デフォルト値を変更すると、既存のデータに影響を与える可能性があります。 デフォルト値を変更する前に、その影響を考慮する必要があります。
MariaDBで既存の列にデフォルト値を追加するには、いくつかの方法があります。 上記の例を参考に、自分に合った方法を選択してください。
方法 1: ALTER TABLE ステートメントを使用する
-- customers テーブルに age 列が存在することを確認する
SELECT *
FROM information_schema.columns
WHERE table_name = 'customers'
AND column_name = 'age';
-- age 列にデフォルト値 18 を追加する
ALTER TABLE customers
ALTER COLUMN age
SET DEFAULT 18;
-- age 列のデフォルト値を確認する
SELECT column_default
FROM information_schema.columns
WHERE table_name = 'customers'
AND column_name = 'age';
方法 2: DEFAULT キーワードを使用する
-- customers テーブルに age 列が存在することを確認する
SELECT *
FROM information_schema.columns
WHERE table_name = 'customers'
AND column_name = 'age';
-- age 列にデフォルト値 18 を指定して新しい列を作成する
ALTER TABLE customers
ADD COLUMN new_age INT DEFAULT 18;
-- new_age 列のデフォルト値を確認する
SELECT column_default
FROM information_schema.columns
WHERE table_name = 'customers'
AND column_name = 'new_age';
方法 3: UPDATE ステートメントを使用する
-- customers テーブルの age 列の値をデフォルト値に更新する
UPDATE customers
SET age = DEFAULT;
-- age 列の値を確認する
SELECT age
FROM customers;
補足
上記のサンプルコードは、MariaDB 10.5.12 で動作確認しています。 使用する MariaDB のバージョンによっては、構文が異なる場合があります。
既存の列にデフォルト値を追加する他の方法
方法 4: CHECK CONSTRAINT を使用する
CHECK CONSTRAINT を使用して、列の値がデフォルト値に等しいことを確認できます。 以下の構文を使用します。
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (column_name = default_value);
ALTER TABLE customers
ADD CONSTRAINT age_default
CHECK (age = 18);
この例では、customers
テーブルの age
列に age_default
という名前の CHECK CONSTRAINT を追加します。 この制約は、age
列の値が 18
に等しいことを確認します。
方法 5: TRIGGER を使用する
TRIGGER を使用して、列に新しい値が挿入されるたびにデフォルト値を設定できます。 以下の構文を使用します。
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
SET NEW.column_name = default_value;
CREATE TRIGGER age_default
BEFORE INSERT ON customers
FOR EACH ROW
SET NEW.age = 18;
この例では、customers
テーブルに age_default
という名前の TRIGGER を作成します。 このトリガーは、customers
テーブルに新しい行が挿入されるたびに、age
列の値を 18
に設定します。
VIEW を使用して、デフォルト値を含む仮想的な列を作成できます。 以下の構文を使用します。
CREATE VIEW view_name
AS
SELECT column_name,
CASE WHEN column_name IS NULL THEN default_value
ELSE column_name
END AS column_name
FROM table_name;
CREATE VIEW customers_with_age_default
AS
SELECT name,
CASE WHEN age IS NULL THEN 18
ELSE age
END AS age
FROM customers;
この例では、customers_with_age_default
という名前の VIEW を作成します。 この VIEW は、customers
テーブルの name
列と age
列を含みます。 age
列は、NULL 値の場合 18
、それ以外の場合は元の age
列の値になります。
mariadb