Skip to content

Latest commit

 

History

History
17 lines (15 loc) · 2.02 KB

multi-query.md

File metadata and controls

17 lines (15 loc) · 2.02 KB

mysql client上直接发送多条sql语句并不是以multi-query方式发送的,二是会被拆成多条,一条条发送给server。如下图: image.png 如上图所示,返回4个结果,其中1、4成功,2、3失败,通过查看数据库,发现1、4数据确实已经insert成功了。 抓包发现,mysql client 是分开发送的4条语句,并不是multi-query: image.png

原因是mysql client会以 ";" 作为 delimiter,所以在mysql client上发送multi-query的正确的方法是:

delimiter ;;
insert into `test` (`name`,`age`,`city`,`time`,`rate`,`id`) values ('litao1',110,'tokyo','2000-01-01 00:00:00',0.6,NULL);insert into `test` (`name`,`age`,`city`,`time`,`rate`,`id`) values ('litao3',110,'tokyo1111111111111111111111111111111111111111111111111111111111111111111111111','2000-01-01 00:00:00',0.6,NULL);insert into `test` (`name`,`age`,`city`,`time`,`rate`,`id`) values ('litao2',110,'tokyo','2000-01-01 00:00:00',0.6,1);insert into `test` (`name`,`age`,`city`,`time`,`rate`,`id`) values ('litao4',110,'beijing','2000-01-01 00:00:00',0.6,NULL);;
delimiter ;

JDBC如何发送multi-query execute是一次发送所有的sql语句(实际上传入时已经拼接成一个String了),然后会收到多个Response,直到第一个错误包 image.png executeBatch同上(mysql-connector-java的实现),代码见 com.mysql.jdbc.StatementImpl.java