SQL NOT NULL制約

概要:このチュートリアルでは、SQL NOT NULL制約を使用して、列にNULL値を格納させないようにする方法を説明します。

SQL NOT NULL制約入門

NOT NULL制約は、列にNULL値のみを持たないように制約するルールを定義する列制約です。

つまり、INSERTステートメントを使用してテーブルに新しい行を挿入する際には、NOT NULL列の値を指定する必要があります。

次のステートメントは、NOT NULL制約の構文を示しています。これにより、column_nameはNULL値を受け入れなくなります。

CREATE TABLE table_name(
   ...
   column_name data_type NOT NULL,
   ...
);Code language: SQL (Structured Query Language) (sql)

論理的には、NOT NULL制約はCHECK制約と同等であるため、上記のステートメントは次のステートメントと同等です。

CREATE TABLE table_name ( 
   ...
   column_name data_type,
   ...
   CHECK (column_name IS NOT NULL)
);Code language: SQL (Structured Query Language) (sql)

たとえば、次のステートメントは、NOT NULL制約を持つtaken_date列を持つtrainingテーブルを作成します。

CREATE TABLE training (
    employee_id INT,
    course_id INT,
    taken_date DATE NOT NULL,
    PRIMARY KEY (employee_id , course_id)
);Code language: SQL (Structured Query Language) (sql)

ほとんどのリレーショナルデータベース管理システムでは、主キー列にNOT NULL制約がデフォルトで自動的に追加されるため、明示的に指定する必要はありません。

次のINSERTステートメントは、NOT NULL制約に違反しています。

INSERT INTO training(employee_id,course_id)
VALUES(1,1);Code language: SQL (Structured Query Language) (sql)

ALTER TABLE NOT NULLステートメント

通常、テーブルを作成するときに、列に対してNOT NULL制約を定義します。ただし、場合によっては、NULL値を受け入れる列の制約をNULL値を受け入れないように変更したい場合があります。

この変更を行うには、次の2つの手順を使用します。

まず、UPDATEステートメントを使用して、現在のすべてのNULL値をNULL以外の値に更新します。

UPDATE table_name
SET column_name = 0
WHERE
	column_name IS NULL;Code language: SQL (Structured Query Language) (sql)

column_nameがNULLである行を見つけるために、WHERE句でIS NULL演算子を使用することに注意してください。

次に、ALTER TABLEステートメントを使用して、列にNOT NULL制約を追加します。

ALTER TABLE table_name
MODIFY column_name data_type NOT NULL;Code language: SQL (Structured Query Language) (sql)

trainingテーブルのtaken_date列がNULLであり、NOT NULLに変更したいとします。

まず、taken_date列のすべてのNULL値を特定の日付(例:現在の日付)に更新します。

UPDATE training
SET taken_date = CURRENT_DATE ()
WHERE
	taken_date IS NULL;Code language: SQL (Structured Query Language) (sql)

次に、take_date列をNOT NULL制約に変更します。

ALTER TABLE training 
MODIFY taken_date date NOT NULL;Code language: SQL (Structured Query Language) (sql)

このチュートリアルでは、NOT NULL制約を使用して、列にNULL以外の値のみを受け入れるように制約する方法を示しました。

このチュートリアルは役に立ちましたか?