複数レコード挿入時は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;