MySQLで複数レコードを一括挿入時の「NOT NULL」フィールドの挙動
公開日:2020年09月25日
複数レコード挿入時はNULLの代わりにフィールドが持つ型の初期値が挿入されています。
数値系フィールドには「0」、文字列系フィールドには「(空文字)」が挿入されます。
テスト用テーブル作成
itemフィールドとpriceフィールドに「NOT NULL」を指定してテーブルを作成します。
CREATE TABLE test1 (
id INT AUTO_INCREMENT PRIMARY KEY,
item CHAR(10) NOT NULL,
price INT NOT NULL
);
1つのレコードを挿入
1つレコードを挿入した時に「NOT NULL」フィールドに「NULL」を指定して挿入するとエラーになります。
実行例1
priceフィールドにNULLを指定して挿入したのでエラー。
MariaDB [lesson]> INSERT INTO test1 (item, price) VALUES ('商品1', NULL);
ERROR 1048 (23000): Column 'price' cannot be null
複数のレコードを一括挿入
複数レコードを挿入した時に「NOT NULL」フィールドに「NULL」を指定して挿入してもエラーにならず、フィールドの型にあわせた初期値が挿入されます。
数値系フィールドには「0」、文字列系フィールドには「(空文字)」が挿入されます。
実行例2
複数レコード一括挿入の場合はNULLを指定してもエラーにならず「warning」を表示して挿入されます。
MariaDB [lesson]> INSERT INTO test1 (item, price) VALUES
-> ('商品1', NULL),
-> (NULL, 200);
Query OK, 2 rows affected, 2 warnings (0.035 sec)
Records: 2 Duplicates: 0 Warnings: 2
Warningを表示
「SHOW WARNINGS;」を使って詳細を表示します。
NOT NULL指定フィールドなのでNULLを挿入できなかった旨が表示されます。
MariaDB [lesson]> SHOW WARNINGS;
+---------+------+-------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------+
| Warning | 1048 | Column 'price' cannot be null |
| Warning | 1048 | Column 'item' cannot be null |
+---------+------+-------------------------------+
2 rows in set (0.000 sec)
挿入されたレコードの確認
テーブル情報を表示します。
NULLの代わりにフィールドが持つ型の初期値が挿入されています。
数値系フィールドには「0」、文字列系フィールドには「(空文字)」が挿入されます。
MariaDB [lesson]> SELECT * FROM test1;
+----+--------+-------+
| id | item | price |
+----+--------+-------+
| 1 | 商品1 | 0 |
| 2 | | 200 |
+----+--------+-------+
2 rows in set (0.000 sec)
今回使用したコード
# テストテーブル作成
CREATE TABLE test1 (
id INT AUTO_INCREMENT PRIMARY KEY,
item CHAR(10) NOT NULL,
price INT NOT NULL
);
# 1つのレコードを挿入
INSERT INTO test1 (item, price) VALUES ('商品1', NULL);
# 複数のレコードを挿入
INSERT INTO test1 (item, price) VALUES
('商品1', NULL),
(NULL, 200);
# Warningsを詳細表示
SHOW WARNINGS;
# テストテーブルを表示
SELECT * FROM test1;
同じカテゴリーのコンテンツ