当 insert 多条语句时初步试了一下是自带事务机制的,如在一个这样的表中:
执行语句
INSERT INTO `t_mytest`(`id`) VALUES (1),(2),(3),(4),(5),(6);
时会失败,不会插进任何一条数据。
一开始试的时候发现前面的 1,2,3 会插进去,换成 begin; INSERT INTO `t_mytest`(`id`) VALUES (1); INSERT INTO `t_mytest`(`id`) VALUES (2); rollback; 的形式也不行,后来才发现原来是因为表的存储引擎是 MyISAM 而不是 InnoDB。
另外我通过 phpmyadmin 往一个 5.7 以上版本的 mysql 服务器里创建表并写入数据时发现数据写入返回成功,可是 select 时没有任何东西,后来 show table 时才发现这个表的存储引擎是 BLACKHOLE,类似于 Linux 的 /dev/null,数据只进不出。应该是因为 phpmyadmin 的版本太低,和 5.7 的服务器太不匹配,创建表时默认使用 BLACKHOLE 的存储引擎了,真神奇。