mysql插入更新操作

同一条数据多次插入到数据库中,会形成脏数据,解决的办法是加上唯一索引,之后的操作会先在数据库中查找有没有存在这样一个唯一索引,如果不存在的话会往数据库里面插入一条新的数据,如果存在的话会进行更新的操作。如果在高并发的情景下上述操作不是原子性。解决的办法可以使用mysql 的关键字ON DUPLICATE KEY UPDATE
具体SQL展示如下

INSERT INTO tbl_data_meter_r (
        	FFM_ID,
        	ZX_FLOW,
        	FX_FLOW,
        	SS_FLOW,
        	TOTAL_FLOW,
        	PIPE_VOLTAGE,
        	PIPE_PRESSURE,
        	FREEZE_DATE
        ) SELECT
        	f.ID,
        	h.ZX_FLOW,
        	h.FX_FLOW,
        	h.SS_FLOW,
        	h.TOTAL_FLOW,
        	h.PIPE_VOLTAGE,
        	h.PIPE_PRESSURE,
        	h.FREEZE_DATE
        FROM
        	tbl_data_meter_h h,
        	(
        		SELECT
        			a.ID
        		FROM
        			tbl_data_meter_h AS a
        		INNER JOIN (
        			SELECT
        				max(FREEZE_DATE) AS FREEZE_DATE
        			FROM
        				tbl_data_meter_h
        			GROUP BY
        				IMEI
        		) AS b ON a.FREEZE_DATE = b.FREEZE_DATE
        		GROUP BY
        			a.IMEI
        		ORDER BY
        			a.FREEZE_DATE DESC
        	) s,
        	tbl_file_flow_meter f
        WHERE
        	h.ID = s.id
        AND f.IMEI = h.IMEI ON DUPLICATE KEY UPDATE FFM_ID =VALUES(FFM_ID),
        	ZX_FLOW =VALUES(ZX_FLOW),
        	FX_FLOW =VALUES(FX_FLOW),
        	SS_FLOW =VALUES(SS_FLOW),
        	TOTAL_FLOW =VALUES(TOTAL_FLOW),
        	PIPE_VOLTAGE =VALUES(PIPE_VOLTAGE),
        	PIPE_PRESSURE =VALUES(PIPE_PRESSURE),
        	FREEZE_DATE =VALUES(FREEZE_DATE)

使用上面的语句之后会发现一个问题,我定义的表id是默认自增,数据重复插入之后id会默认加一,插入一条不重复的数据会比上一条数据ID>2.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值