加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql插入更新操作

发布时间:2022-11-17 14:01:38 所属栏目: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.

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!