业务背景:因为新增和修改的数据库表很多,新增和修改的操作也很多并且为批量操作,所以就把新增和修改的sql写到一个sql中,这样我可以把要保存和修改的数据放到一个集合中批量操作
这是我的sql,入参是一个集合
这是只是伪sql
insert into 表名
(列名)
values
for
(页面传过来的数据)
on duplicate key update
数据库列名 = values(数据库列名)这个很关键,有多少都是这样写
批量更新的sql
1、.replace into 批量更新
replace into test_tbl (id,dr) values (1,‘2’),(2,‘3’),…(x,‘y’);
例子:replace into book (Id
,Author
,CreatedTime
,UpdatedTime
) values (1,‘张飞’,‘2016-12-12 12:20’,‘2016-12-12 12:20’),(2,‘关羽’,‘2016-12-12 12:20’,‘2016-12-12 12:20’);
2、insert into …on duplicate key update批量更新
insert into test_tbl (id,dr) values (1,‘2’),(2,‘3’),…(x,‘y’) on duplicate key update dr=values(dr);
例子:insert into book (Id
,Author
,CreatedTime
,UpdatedTime
) values (1,‘张飞2’,‘2017-12-12 12:20’,‘2017-12-12 12:20’),(2,‘关羽2’,‘2017-12-12 12:20’,‘2017-12-12 12:20’) on duplicate key update Author=values(Author),CreatedTime=values(CreatedTime),UpdatedTime=values(UpdatedTime);
replace into 和 insert into on duplicate key update的不同在于:
replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。
insert into 则是只update重复记录,不会改变其它字段。