Mysql的ON DUPLICATE KEY UPDATE使

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为唯一字段

1
2
3
4
5
6
7
8
9
10
11
12
13
sql复制代码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:

1
2
3
sql复制代码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插入会出错,因为有唯一字段,一旦出现重复数据将无法插入

如果建表的时候忘记设置,或者设置错误,可以在后续继续修改和添加

1
2
3
4
sql复制代码添加唯一字段:可以是多个,将上表shopId设置为唯一字段 
ALTER TABLE get_query_shop ADD unique(`shopId)
删除唯一字段id_only(只是删除唯一字段,字段还保留在数据表)
alter table get_query_pdd drop index `id_only`;

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%