【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を拒否します。