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)