mybatis insert into select 丢失数据

louxu623 发布于 2016/06/22 10:50
阅读 439
收藏 0

我在使用Mybatis执行insert into select 的时候出现了数据丢失,这是什么情况呢?下面是我的配置:

<!-- 保存15分钟统计数据 -->
     <insert id="insertStatisticsData" parameterType="com.nantian.nump.bean.State" >
        insert into ${indexCode}
            select t.IP as IP, t.COMPONENT_CODE AS COMPONENT_CODE, ${collectTime} as COLLECT_TIME, t.INDEX_CODE as INDEX_CODE,
                max(t.value) as MAX_VALUE, min(t.value) as MIN_VALUE, cast(avg(cast(t.value as decimal(15,2))) as decimal(15,2)) as AVG_VALUE
               from (select d.* from ${tabname} d, INDEX_ITEM i, MONITOR_UNIT m
                       where i.INDEX_CODE = (case locate('-', d.index_code) when 0 then d.index_code else substr(d.index_code, 1, locate('-', d.index_code)-1) end)
                              and i.UNIT_ID = m.UNIT_ID and i.CLASS_ID = m.CLASS_ID
                              and m.CHART_TYPE &lt;&gt; '0'
                                 and collect_time &lt; #{value} and collect_time &gt;= #{componentCode}) t
               group by t.IP, t.COMPONENT_CODE, t.INDEX_CODE
     </insert>

执行之后插入的数据比实际查询出来的少了几十条,数据是没有问题的,所有字段都是字符串,并且长度一致也没有超限。主键不冲突(如11.129.163.65和11.129.163.66,这其中有条数据就丢失了)。执行过程中没有出现异常。

请各位大神帮忙看看,谢谢!非常感谢。

加载中
0
zheng_pat
zheng_pat
实在不行将执行的sql 全部捞取出来,一个个分析那个地方出问题了。这么复杂的SQL 多半是出在group 那个地方了
0
whatwhowhy
whatwhowhy
观察下少的数据和没少的有什么区别
0
louxu623
louxu623
谢谢各位关注,问题已经解决,并不是Mybatis的问题,数据没有丢失,而是我的数据库事务引起的,在程序执行的时候实际数据并没有提交到数据库,而当我手动执行时,数据已经正常了,也就是说因为程序执行和我手动执行的时间不一致,导致 select 出来的结果并不是一致的。
0
jinyanjun
jinyanjun
不建议写这么复杂的sql,可以在程序中分步查询出来再插入。
返回顶部
顶部