mysql存在插入,不存在更新操作 insert into table_name (key1,key2,key3)VALUEs(?,?,?) ON DUPLICATE KEY UPDATE key1 = VALUES(value1),key2=VALUES(value2),updatetime = CURRENT_TIMESTAMP;
对比直接插入 inert into table_name(key1,key2,key3)VALUES(?,?,?)
多了ON DUPLICATE KEY UPDATE key1=VALUES(value1); 建立数据表的时候需要用关键字UNIQUE指定唯一字段,
比如设置id_only为唯一字段
CREATE TABLE `get_query_shop` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`shopId` varchar(100) DEFAULT NULL COMMENT '店铺Id',
`cid1Name` varchar(100) DEFAULT NULL COMMENT '一级类目名称',
`cid2Name` varchar(1000) DEFAULT NULL COMMENT '二级类目名称',
`id_only` varchar(100) DEFAULT NULL COMMENT '标记唯一订单行:',
`orderTime` varchar(100) DEFAULT NULL COMMENT '下单时间',
`createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
`updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `id_only` (`id_only`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
需要更新那些字段就添加在ON DUPLICATE KEY UPDATE后面,可以更新一个或多个字段 例如更新orderTime和cid1Name:
insert into get_query_shop (shopId,cid1Name,cid2Name,id_only,orderTime)VALUEs
("10010","1","1-2","a","20210202") ON DUPLICATE KEY UPDATE orderTime =
VALUES("20210202"),cid1Name=VALUES("1-2"),updatetime = CURRENT_TIMESTAMP;
需要注意的是:这种插入法,数据的ID字段不会连续,并且直接inster插入会出错,因为有唯一字段,一旦出现重复数据将无法插入
如果建表的时候忘记设置,或者设置错误,可以在后续继续修改和添加
添加唯一字段:可以是多个,将上表shopId设置为唯一字段
ALTER TABLE get_query_shop ADD unique(`shopId)
删除唯一字段id_only(只是删除唯一字段,字段还保留在数据表)
alter table get_query_pdd drop index `id_only`;