您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

MySQL快速插入以及批量更新

2024/3/31 6:04:42发布13次查看
在程序中可以通过循环,添加values对应的列表,最后使用一次executeupdate完成插入操作。但是mysql语句并不是越长越好,mysql语句
插入:
mysql提供了可以一次插入多条数据的用法:
insert into tbl_name (a,b,c) values(1,2,3),(4,5,6),(7,8,9),(10,11,12)...;
在程序中可以通过循环,添加values对应的列表,最后使用一次executeupdate完成插入操作。但是mysql语句并不是越长越好,mysql语句长度有限制,可以查看mysql的配置文件my.in中max_allowed_packet属性,并进行相应设置。
更新:
mysql中没有提供像insert一样一次更新多条记录,需要逐条语句拼接。
update weibo set username = 'xyw' where id = '22';update weibo set userid = '143' where id = '35';
你可以使用addbatch语句,将拼接起来的sql语句进行一次性处理,但是效率并不高。
但是这样做,可能会出现问题:参考:
针对以上的不足,可以使用另一种方法执行批量更新。
insert into tbl_name [col_name1, col_name2,...)] values(col_value1,col_value2,...), (col_value1,col_value2,...)on duplicate key update username=values(username)
使用这种方法必须满足条件:col_name1, col_name2,...中必须有主键或者唯一键。
username是要更新的列。
如果想一次更新多列,可以在username=values(username)后面继续添加,例如:
insert into tbl_name [col_name1, col_name2,...)] values(col_value1,col_value2,...), (col_value1,col_value2,...)on duplicate key update username=values(username), userid = values(userid)
这样就可以同时更新username和userid两个字段。
它的实现原理是,首先mysql根据表名后面列出的主键,查找表(因为是主键,所以在表中唯一存在)。如果存在该行数据,则按照最后的col_name = values(col_name)列表对相应的字段,按照values列表中给出的值进行更新。建议:表名后面的字段列表,除了主键之外,列出来的最好都作为更新的对象,即在语句最后都要有相应的col_name = values(col_name),否则,你在表名后罗列出来字段,在values中赋值了,但是不是更新的对象,显然是浪费。
如果不存在该行数据,则进行插入操作,没有作为更新对象的列按照默认值填充(前提是mysql运行在非严格模式下。如果在严格模式下,没列都需要有默认值,否则运行出错)。
注意:
主键可以作为更新的对象 ,但是只是在表中不存在该记录时起作用,即执行了插入操作,如果表中已经存在了该主键对应的行数据,下次更新时不会再插入该行,而是执行除了主键之外的其他列的更新操作。所以最好不要将主键设置为更新的对象。
实例:
insert into keywordtable(id, keyword, username, userid) values(1, '你好', 'eliot', 22), (2, 'hello', 'jhon', 23),
(3, '嘻嘻', 'jim', 24) on duplicate key update keyword=values(keyword), username=values(username),userid=values(userid);
除了id外,,字段有keyword, username, userid,他们是要更新的字段。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product