国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

insert into … on duplicate key update / replace into 多行數據介紹

2020-01-18 23:32:13
字體:
來源:轉載
供稿:網友

場景是這樣的,我有KV型的表,建表語句如下:

復制代碼 代碼如下:

CREATE TABLE `dkv` (
  `k1` int(11) NOT NULL DEFAULT '0',
  `k2` int(11) NOT NULL DEFAULT '0',
  `val` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`k1`,`k2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

數據大概是這樣的:

+----+----+-----------+
| k1 | k2 | val       |
+----+----+-----------+
|  1 |  1 | value 1-1 |
|  1 |  2 | value 1-1 |
|  1 |  3 | value 1-1 |
|  1 |  5 | value 1-1 |
|  1 |  7 | value 1-1 |
+----+----+-----------+

當我插入一條數據時,我要判斷(k1,k2)是否已經存在(1條selete),若存在就update,不存在就insert,這是一個典型的merge過程,雖然按照PK執行操作的速度非???,但是畢竟SQL交互量上去了,如果我有100筆這樣的SQL,那這個開銷是很可觀的,有沒有什么一條SQL就能搞定的事情呢?

有兩種寫法:

第一種: insert into … on duplicate key update

復制代碼 代碼如下:

insert DELAYED into dkv 
values
(1,2,'new 12a'),
(1,3,'new 33ba'),
(1,4,'new 23222'),
(1,6,'new 12333'),
(1,8,'new vaaaa'),
(1,20,'new vaff'),
(1,25,'new vaff')
ON DUPLICATE KEY UPDATE val=VALUES(val);

第二種 replace into:

復制代碼 代碼如下:

replace into dkv 
values
(1,2,'new 12a'),
(1,3,'new 33ba'),
(1,4,'new 23222'),
(1,6,'new 12333'),
(1,8,'new vaaaa'),
(1,20,'new vaff'),
(1,25,'new vaff');

最終都能將數據改成這樣:

復制代碼 代碼如下:

+----+----+-----------+
| k1 | k2 | val       |
+----+----+-----------+
|  1 |  1 | value 1-1 |
|  1 |  2 | new 12a   |
|  1 |  3 | new 33ba  |
|  1 |  4 | new 23222 |
|  1 |  5 | value 1-1 |
|  1 |  6 | new 12333 |
|  1 |  7 | value 1-1 |
|  1 |  8 | new vaaaa |
|  1 | 20 | new vaff  |
|  1 | 25 | new vaff  |
+----+----+-----------+

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威宁| 石台县| 即墨市| 万盛区| 称多县| 新化县| 杨浦区| 张家界市| 天峨县| 察隅县| 舒兰市| 荣成市| 若尔盖县| 大荔县| 武义县| 霍城县| 修水县| 清流县| 青河县| 甘德县| 繁峙县| 中西区| 梅河口市| 新兴县| 依安县| 九寨沟县| 岳西县| 贵州省| 岫岩| 青冈县| 松溪县| 泰安市| 汕尾市| 德庆县| 太白县| 盘山县| 定州市| 莲花县| 凤阳县| 阿鲁科尔沁旗| 彰化县|