mysql插入更新操作
发布时间:2022-11-23 11:17:49 所属栏目: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. (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐




浙公网安备 33038102330484号