MySQL中使用INSERT VALUES语法插入多行是否为串行执行?
MySQL多行INSERT操作的执行方式
首先看你的表结构:
create table tmp ( id int auto_increment primary key, name varchar(20) ) ENGINE=InnoDB;
以及你使用的多行插入语句:
insert into tmp(name) values('tom'), ('cat'), ('rat');
针对这个操作,它不是逐行串行执行的,具体说明如下:
- 这条单条INSERT语句会被MySQL作为一个整体操作处理,InnoDB引擎会在同一个事务内完成所有行的插入(默认自动提交事务的情况下,该事务会在语句执行完成后自动提交)
- 自增主键
id的分配是一次性完成的,不会出现中间被其他事务抢占自增ID的情况(除非特意将innodb_autoinc_lock_mode设置为0) - 整个操作遵循事务原子性:要么所有行插入成功,要么全部回滚,不会出现部分插入成功的情况
如果是拆分成多条独立的INSERT语句(比如INSERT INTO tmp(name) VALUES('tom'); INSERT INTO tmp(name) VALUES('cat');),那才是逐语句串行执行,但单条多行INSERT是作为单一整体执行的。
内容的提问来源于stack exchange,提问作者Ryanqy
相关产品推荐
相关产品推荐

