jouypub.comMySql进阶

MySQL使用on duplicate key update时导

2018-08-07  本文已影响0人  JouyPub

在做数据统计的时候,我们经常会用到mysql的on duplicate key update语法来自动更新数据,比如

最近项目上需要实现这么一个功能:统计每个人每个软件的使用时长,客户端发过来消息,如果该用户该软件已经存在增更新使用时间,如果没有则新添加一条记录,代码如下:

<update  id="saveOrUpdate"  parameterType="java.util.List">  
    <foreach collection="appList" item="item" index="index"  separator=";">  
        insert into app_table(userName,app,duration) values(#{userName},#{item.app},#{item.duration}) on duplicate key update duration=duration+#{item.duration}  
    </foreach> 
</update>  

使用on duplicate key update语法有时是很方便,但是会有一个影响:默认情况下,每次更新都会更新该表的自增主键ID,如果更新频率很快,会导致主键ID自增的很快,过段时间就超过数字类型的的范围了

解决这个问题,有两种方式:

方法一:拆分成两个动作,先查询,再更新

方法二:修改innodb_autoinc_lock_mode参数(不推荐)
  innodb_autoinc_lock_mode中有3种模式,0,1,2,数据库默认是1的情况下,就会发生上面的那种现象,每次使用insert into .. on duplicate key update 的时候都会把简单自增id增加,不管是发生了insert还是update

innodb_autoinc_lock_mode参数详解

上一篇下一篇

猜你喜欢

热点阅读