SQL 速習チュートリアル

SQL NOT NULL 制約

1. SQL NOT NULL 制約

NOT NULL 制約は、カラム(列)が NULL 値を受け入れないように強制するルールです。

これにより、対象のフィールドは常に何らかの値を保持することが保証されます。つまり、このフィールドに値を指定せずに新しいレコードを挿入(インサート)したり、既存のレコードを更新(アップデート)したりすることはできなくなります。

デフォルトの設定では、カラムは NULL 値を保持することが許可されています。

2. CREATE TABLE 時の NOT NULL

テーブルを新規作成する際に NOT NULL 制約を定義するには、カラム名のデータ型の直後に NOT NULL キーワードを追加します。

次の SQL は、「Persons」テーブルを作成し、「ID」「LastName」「FirstName」の各カラムが NULL 値を受け入れないように設定する例です。

実行例:

CREATE TABLE Persons (
    ID int NOT NULL,              -- ID(整数型、NULL不可)
    LastName varchar(255) NOT NULL, -- 姓(可変長文字列、NULL不可)
    FirstName varchar(255) NOT NULL, -- 名(可変長文字列、NULL不可)
    Age int                       -- 年齢(整数型、NULL可)
);

3. ALTER TABLE 時の NOT NULL

既に作成されている既存のテーブルに対して NOT NULL 制約を定義するには、ALTER TABLE 文を使用し、データ型の後に NOT NULL を指定します。

以下は、作成済みの「Persons」テーブルの「Age」カラムに対して NOT NULL 制約を追加する際の、主要なデータベースごとの構文です。

3.1 SQL Server / MS Access の構文

ALTER TABLE Persons
ALTER COLUMN Age int NOT NULL;

3.2 MySQL の構文

ALTER TABLE Persons
MODIFY COLUMN Age int NOT NULL;

3.3 Oracle 10G+ の構文

ALTER TABLE Persons
MODIFY Age int NOT NULL;

4. NOT NULL 制約の削除

カラムから NOT NULL 制約を削除し、再び NULL 値を許可するように変更するには、以下の構文を使用します。

4.1 SQL Server / MS Access の構文

ALTER TABLE Persons
ALTER COLUMN Age int NULL;

4.2 MySQL の構文

ALTER TABLE Persons
MODIFY COLUMN Age int NULL;

4.3 Oracle 10G+ の構文

ALTER TABLE Persons
MODIFY Age int NULL;