MySQLのNOT NULL制約とは?NULLを許可しない設定!

MySQL MySQL

MySQLでテーブルを作成するときに、カラムに対してNOT NULL制約をつける方法について書いています。

テーブルのNOT NULL制約について

テーブルを作成するときに、カラムに対してNOT NULL制約をつけておきます。
そうすると、NOT NULL制約をつけたカラムに対して、NULLを設定できないようにすることができます。

特に設定がない場合には、NULLを登録することができます。
こちらのfruitsテーブルを使って解説します。

CREATE TABLE fruits (
  id BIGINT NOT NULL AUTO_INCREMENT,
  name VARCHAR(256),
  price INT,
  PRIMARY KEY (id)
);

カラムにNULLを設定する

fruitsテーブルでは、id以外のカラムにはNOT NULLを設定していないので、NULL登録することができます。
例えば、下記のようにSQLを実行します。

INSERT INTO fruits (name, price) VALUE (NULL, 100);
INSERT INTO fruits (name, price) VALUE ('apple', NULL);
INSERT INTO fruits (name, price) VALUE ('banana', 120);

nameとpriceカラムにNULLを持つ、2行のレコードと、どちらの値も指定しているレコードを追加してみました。
SELECT文でレコードを確認すると、下記のように登録されていることが確認できます。

mysql> SELECT * FROM fruits;
+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  1 | NULL   |   100 |
|  2 | apple  |  NULL |
|  3 | banana |   120 |
+----+--------+-------+
3 rows in set (0.00 sec)

このようにNULLを設定することができました。

NOT NULL制約をつける

NOT NULL制約をつけることで、指定したカラムにインサートできないようにすることができます。

CREATE TABLE fruits (
  id BIGINT NOT NULL AUTO_INCREMENT,
  name VARCHAR(256) NOT NULL,
  price INT NOT NULL,
  PRIMARY KEY (id)
);

nameとpriceカラムに対して、NOT NULLを設定して、NULLが登録できないようにしました。
テーブルを作成した後に、下記のようにINSERT文を実行して、データを登録してみます。

mysql> INSERT INTO fruits (name, price) VALUE (NULL, 100);
ERROR 1048 (23000): Column 'name' cannot be null

mysql> INSERT INTO fruits (name, price) VALUE ('apple', NULL);
ERROR 1048 (23000): Column 'price' cannot be null

mysql> INSERT INTO fruits (name, price) VALUE ('banana', 120);
Query OK, 1 row affected (0.00 sec)

nameとpriceカラムにNULLを入れて登録しようとすると、ERROR 1048 (23000)エラーが発生しました。
それぞれのカラムにはNULLが登録できないようになりました。

どちらの値も指定したときには登録することができました。

後からNOT NULL設定をする(ALTER TABLE)

ALTER TABLEを使って、すでに作成したテーブルに後からNOT NULL制約をつけることができます。

ALTER TABLE テーブル名 MODIFY name 型 NOT NULL」でテーブル構造を変更できます。
先ほどのfruitsテーブルのname・priceカラムにNOT NULL制約をつけるように変更すると下記のようになります。

ALTER TABLE fruits MODIFY name VARCHAR(256) NOT NULL;
ALTER TABLE fruits MODIFY price INT NOT NULL;

MySQLのNOT NULL制約についてまとめ

今回はMySQLのテーブルのカラムに、NOT NULL制約をつける方法について書きました。
記事の内容をまとめると下記のようになります。

・カラムにNOT NULLをつけないときにはデフォルトNULLになる。
・NULL許可されているカラムには、NULLを登録することができる。
・カラムにNOT NULLを設定すると、NULLの値が登録することができない。

コメント

タイトルとURLをコピーしました