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制約をつける方法について書きました。
記事の内容をまとめると下記のようになります。
・NULL許可されているカラムには、NULLを登録することができる。
・カラムにNOT NULLを設定すると、NULLの値が登録することができない。
コメント