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;