insert into … on duplicate key update / replace into 多行數(shù)據(jù)介紹
場(chǎng)景是這樣的,我有KV型的表,建表語(yǔ)句如下:
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
數(shù)據(jù)大概是這樣的:
+----+----+-----------+
| 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 |
+----+----+-----------+
當(dāng)我插入一條數(shù)據(jù)時(shí),我要判斷(k1,k2)是否已經(jīng)存在(1條selete),若存在就update,不存在就insert,這是一個(gè)典型的merge過(guò)程,雖然按照PK執(zhí)行操作的速度非常快,但是畢竟SQL交互量上去了,如果我有100筆這樣的SQL,那這個(gè)開(kāi)銷是很可觀的,有沒(méi)有什么一條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');
最終都能將數(shù)據(jù)改成這樣:
+----+----+-----------+
| 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 |
+----+----+-----------+
相關(guān)文章
mysql安裝圖解 mysql圖文安裝教程(詳細(xì)說(shuō)明)
很多朋友剛開(kāi)始接觸mysql數(shù)據(jù)庫(kù)服務(wù)器,下面是網(wǎng)友整理的一篇mysql的安裝教程,步驟明細(xì)也有詳細(xì)的說(shuō)明。2010-06-06干掉一堆mysql數(shù)據(jù)庫(kù),僅需這樣一個(gè)shell腳本(推薦)
這篇文章主要介紹了干掉一堆mysql數(shù)據(jù)庫(kù),僅需這樣一個(gè)shell腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04計(jì)算機(jī)二級(jí)考試MySQL??键c(diǎn) 8種MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化方法
這篇文章主要為大家詳細(xì)介紹了計(jì)算機(jī)二級(jí)考試MySQL常考點(diǎn),詳細(xì)介紹8種MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08關(guān)于 MySQL 嵌套子查詢中無(wú)法關(guān)聯(lián)主表字段問(wèn)題的解決方法
這篇文章主要介紹了關(guān)于 MySQL 嵌套子查詢中,無(wú)法關(guān)聯(lián)主表字段問(wèn)題的折中解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12SQL實(shí)現(xiàn)數(shù)據(jù)過(guò)濾流程詳解
這篇文章主要介紹了SQL實(shí)現(xiàn)數(shù)據(jù)過(guò)濾流程,當(dāng)我們?cè)赟QL中查詢數(shù)據(jù)時(shí),肯定是有一些數(shù)據(jù)是我們不需要的,所以我們此時(shí)就要對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,以篩選出我們僅需要的數(shù)據(jù)2023-01-01論一條select語(yǔ)句在MySQL是怎樣執(zhí)行的
本文將建立一套建立一套MySQL的知識(shí)框架,通過(guò)討論select語(yǔ)句在MySQL是怎樣執(zhí)行的來(lái)展開(kāi)內(nèi)容,感興趣的小伙伴一起來(lái)看下文吧2021-08-08