SQL 速習チュートリアル

SQL DEFAULT 制約

DEFAULT 制約は、カラムに対して値が指定されなかった場合に、自動的にデフォルト値を挿入するために使用されます。

このデフォルト値は、他の値が指定されない限り、すべての新しいレコードに追加されます。

1. CREATE TABLE における DEFAULT 制約

以下の SQL は、「Persons」テーブルの作成時に「City」カラムに対して DEFAULT 値を設定しています。

CREATE TABLE Persons (
    ID int PRIMARY KEY, -- IDを主キーに設定
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255) DEFAULT 'Sandnes' -- Cityが未指定の場合、'Sandnes'が自動挿入される
);

また、DEFAULT 制約では、CURRENT_DATE() などの関数を使用してシステム値を挿入することも可能です。以下は現在の日付を自動挿入する例です。

MySQL:

CREATE TABLE Orders (
    ID int PRIMARY KEY,
    OrderNumber int NOT NULL,
    OrderDate date DEFAULT CURRENT_DATE() -- 現在の日付をデフォルト値に設定
);

SQL Server:

SQL Server で同様の結果(現在の日付の挿入)を得るには、以下の SQL を使用します。

CREATE TABLE Orders (
    ID int PRIMARY KEY,
    OrderNumber int NOT NULL,
    OrderDate date DEFAULT CAST(GETDATE() AS date) -- GETDATE関数をdate型にキャストして設定
);

2. ALTER TABLE における DEFAULT 制約

テーブルが既に作成されている状態で、後から「City」カラムに DEFAULT 制約を定義する場合の SQL 構文は、RDBMS によって異なります。

MySQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';

SQL Server:

ALTER TABLE Persons
ADD CONSTRAINT df_City DEFAULT 'Sandnes' FOR City;

MS Access:

ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';

Oracle:

ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';

3. DEFAULT 制約の削除

設定された DEFAULT 制約を削除するための SQL も、各データベースエンジンごとに異なります。

MySQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT;

SQL Server:

ALTER TABLE Persons
DROP CONSTRAINT df_City;

MS Access:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

Oracle:

ALTER TABLE Persons
MODIFY (City DEFAULT NULL);