参考 :
mysql如果数据不存在,则插入新数据,否则更新的实现方法 - CooMark - 博客园
MySQL 当记录不存在时insert,当记录存在时update_阿然的专栏-CSDN博客
需求 : 有一个设备,当该设备状态发生变更时把状态信息插入数据库,若已记录该设备就更新状态,不存在则插入状态信息
解决方法 :
1. 建立一张表,改表有两个字段
CREATE TABLE `device_state` (
`device_id` varchar(200) NULL COMMENT '设备id',
`state` int(1) NULL COMMENT '设备状态(1:运行中;2:停机)'
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci;
2. device_id 字段 设置唯一索引
ALTER TABLE `device_state`
ADD UNIQUE KEY `Unique_1`(`device_id`);
3. 测试
INSERT INTO `device_state`
set `state`= 1,
`device_id`= 'd1' on duplicate key
update `state`= 1
上面的sql重复执行多次,表中也只有一条数据
INSERT INTO `device_state`
set `state`= 1,
`device_id`= 'd2' on duplicate key
update `state`= 1
上面的sql执行后则会在数据库新增一条数据
总结 : 由于唯一索引的存在,只有唯一索引字段存在就更新,不存在才会插入
4.不存在则插入,存在则更新
INSERT INTO device_state (`device_id` , `state` ) VALUES
('d2',1) ON DUPLICATE KEY UPDATE state=state+1;
END。