MySQLでbulk insertの途中でエラーになった場合の挙動

·1 分で読めます

MySQLで

insert into ... values (1, 'x'), (2, 'y');

のようにbulk insertした時に、途中でエラーになった場合にどういう挙動をするかを調べてみた。普通に考えれば「全てのレコードがinsertされてない」になるはずだと思ったんだけど一応。試したMySQLのバージョンは5.5.28。

結果からいうと想定通りで、「途中でエラーが起こると全てのレコードがinsertされてない」になった。

CREATE TABLE `t1` (

`id` int(11) NOT NULL DEFAULT '0',

`value` varchar(255) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql> insert into t1 (id, value) values (0, '0'), (0, '1');

ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

mysql> select * from t1;

Empty set (0.00 sec)

[tmkm-amazon]4873115868[/tmkm-amazon]