方法1:使用replace关键字

replace是insert的增强版,可以实现插入的数据和已存在的数据发生主键或者唯一键重复,则删除已存在的数据,再实现插入,如果不重复,则直接插入数据。

结合Mybatis批量处理,用法如下:

replace into

schoolTable(Id,describeDataForm,childrenID,relevanceID,showType)

values

(

#{schoolDataForm.Id},

#{schoolDataForm.describeDataForm},

#{schoolDataForm.childrenID},

#{schoolDataForm.relevanceID},

#{schoolDataForm.showType}

)

方法2:使用ON DUPLICATE KEY UPDATE

该方法能够在主键或者唯一键重复时,修改原记录中某字段的数据。

结合Mybatis批量处理,用法如下:

insert into

schoolTable(Id,describeDataForm,childrenID,relevanceID,showType)

values

(

#{schoolDataForm.Id},

#{schoolDataForm.describeDataForm},

#{schoolDataForm.childrenID},

#{schoolDataForm.relevanceID},

#{schoolDataForm.showType}

)

ON DUPLICATE KEY UPDATE

describeDataForm=values(describeDataForm),

childrenID=values(childrenID),

relevanceID=values(relevanceID),

showType=values(showType)

性能区别:

正如replace底层实现所示,如果主键重复会先删除数据库中原来的记录,插入新纪录。但是数据库删除操作需要维护主键索引,这无疑需要消耗性能。

ON DUPLICATE KET QPDATE只是在主键重复时修改所需字段的值,所以不影响主键。维护成本自然相对于replace低。

注意:在数据量较小时,两者效率大致相同,都很快,但是出现大量数据(百万级别)时,差异就显示出来了。

---------------------

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐