【MySQL】NULL / NOT NULL 制約 - NULLの許容可否
MySQLのNULL / NOT NULL制約について解説します。
検証環境
NULL
NULL
は値が無い(空)であることを示す値です。
MySQLではNULL制約またはNOT NULL制約によって、カラムがNULLを許可するかどうかを定義できます。
NULL制約
NULL制約は“NULLを許可する制約”です。
NULL
に関する制約がない場合、デフォルトではNULL
を許可しますが、NULL制約で明示的に示すことができます。
基本構文
カラム定義 NULL
サンプル
___ih_hl_start
mysql> CREATE TABLE sample ( num INT NULL );
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)
___ih_hl_start
mysql> INSERT INTO sample VALUE ( NULL );
___ih_hl_end
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM sample;
+------+
| num |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
1行目のsample
テーブルの定義において、num
カラムにNULL制約を適用しています。
4行目ではnum
カラムの値がNULL
のレコードを追加するクエリを実行しており、正常に処理されたことが分かります。
NOT NULL制約
NOT NULL制約は“NULLを拒否する制約”です。
基本構文
カラム定義 NOT NULL
サンプル
___ih_hl_start
mysql> CREATE TABLE sample ( num INT NOT NULL );
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)
___ih_hl_start
mysql> INSERT INTO sample VALUE ( NULL );
___ih_hl_end
ERROR 1048 (23000): Column 'num' cannot be null
1行目のsample
テーブルの定義において、num
カラムにNOT NULL制約を適用しています。
4行目ではnum
カラムの値がNULL
のレコードを追加するクエリを実行していますが、エラーが発生しています。
制約の確認
NULL / NOT NULLの制約はDESC
を使ったテーブル情報で確認できます。
mysql> CREATE TABLE sample ( num1 INT NULL, num2 INT NOT NULL );
Query OK, 0 rows affected (0.01 sec)
mysql> DESC sample;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| num1 | int | YES | | NULL | |
| num2 | int | NO | | NULL | |
+-------+------+------+-----+---------+-------+
2 rows in set (0.01 sec)
NULLの項目がYES
ならNULLを許可、NO
ならNULLを拒否します。