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);