概要:このチュートリアルでは、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以外の値のみを受け入れるように制約する方法を示しました。