INSERT ... ON DUPLICATE KEY UPDATE
插入或者更新
insert into 表名(字段1,字段2) VALUES(值1,值2)
ON DUPLICATE KEY UPDATE username=值3
如上语句的意思的意思是如果字段1不存在(主键,索引或者唯一条件不存在),则执行插入语句,存在则执行更新语句,该更新只更新需要的字段,不影响其他字段的值;
注意:多线程并发会导致死锁的可能。
示例:
insert into work_electricity_report_day(report_date,var_id,foreign_name,foreign_id,device_id,report_value,create_time)
VALUES(#{item.reportDate},#{item.varId},#{item.foreignName},#{item.foreignId},#{item.deviceId},#{item.reportValue},NOW())
ON DUPLICATE KEY UPDATE report_value=#{item.reportValue},update_time=NOW()
INSERT IGNORE INTO .. VALUES
插入或者丢弃
INSERT IGNORE INTO 表名(字段1,字段2)
VALUES(值A,值B);
如上语句的意思是如果字段1不存在(主键,索引或者唯一条件不存在),则执行插入语句,如果存在,直接忽略不修改任何数据,不会报错。
REPLACE INTO ... VALUES
插入或者替换
REPLACE INTO 表名(字段1,字段2)
VALUES(值A,值B);
如上语句的意思的意思是如果字段1不存在(主键,索引或者唯一条件不存在),则执行插入语句,存在则执行更新语句,该更新是将该条存在的记录删除,然后再插入,所以其他的字段的值都是NULL。