mysql實(shí)現(xiàn)merge into問題
一 前言
1.查了很多資料,replace into也好 insert into on duplicate key update 也好,都需要原始數(shù)據(jù)表具有唯一性索引。
2.網(wǎng)上方法很多,最簡便還是使用如上語句,如果不想創(chuàng)建唯一性索引,則可以通過存儲(chǔ)過程實(shí)現(xiàn)。不解釋連招如下。
二 實(shí)驗(yàn)
-- 創(chuàng)建測試表 -- drop table test_a; create table test_a( id VARCHAR (16), name VARCHAR (16), Operatime datetime ) -- drop table test_b; create table test_b( id VARCHAR (16), name VARCHAR (16), Operatime datetime ) -- 插入模擬數(shù)據(jù) INSERT into test_b values(1,"1",now()),(2,"2",now()); INSERT into test_a values(1,"1",now()),(3,"3",now()); -- 查詢數(shù)據(jù) SELECT * FROM test_b; SELECT * FROM test_a;
delimiter $ CREATE PROCEDURE merge_a_to_b () BEGIN -- 定義需要插入從a表插入b表的過程變量 DECLARE _ID VARCHAR (16); DECLARE _NAME VARCHAR (16); -- 游標(biāo)遍歷數(shù)據(jù)結(jié)束標(biāo)志 DECLARE done INT DEFAULT FALSE; -- 游標(biāo)指向a表結(jié)果集第一條-1位置 DECLARE cur_account CURSOR FOR SELECT ID, NAME FROM test_a; -- 游標(biāo)指向a表結(jié)果集最后一條加1位置 設(shè)置結(jié)束標(biāo)志 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 打開游標(biāo) OPEN cur_account; -- 遍歷游標(biāo) read_loop : LOOP -- 取值a表當(dāng)前位置數(shù)據(jù)到臨時(shí)變量 FETCH NEXT FROM cur_account INTO _ID,_NAME; -- 如果取值結(jié)束 跳出循環(huán) IF done THEN LEAVE read_loop; END IF; -- 當(dāng)前數(shù)據(jù)做 對(duì)比 如果b表存在則更新時(shí)間 不存在則插入 IF NOT EXISTS ( SELECT 1 FROM TEST_B WHERE ID = _ID AND NAME=_NAME ) THEN INSERT INTO TEST_B (ID, NAME,operatime) VALUES (_ID,_NAME,now()); ELSE UPDATE TEST_B set operatime = now() WHERE ID = _ID AND NAME=_NAME; END IF; END LOOP; CLOSE cur_account; END $
三 驗(yàn)證
-- 驗(yàn)證語句 SELECT * FROM test_b; SELECT * FROM test_a; call merge_a_to_b(); SELECT * FROM test_b; SELECT * FROM test_a;
- 操作前
- 操作后
數(shù)據(jù)1更新 數(shù)據(jù)3插入 ok
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL5.7.03 更換高版本到MySQL 5.7.17安裝過程及發(fā)現(xiàn)問題解決方案
這篇文章主要介紹了MySQL5.7.03 更換高版本到MySQL 5.7.17安裝過程及發(fā)現(xiàn)問題解決方案,需要的朋友可以參考下2017-08-08關(guān)于MySQL索引的幾點(diǎn)值得注意的事項(xiàng)
索引對(duì)查詢的速度有著至關(guān)重要的影響,MySQL索引的建立對(duì)于MySQL的高效運(yùn)行是很重要的2014-07-07MySQL數(shù)據(jù)表合并去重的簡單實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)表合并去重的簡單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05解析windows下使用命令的方式安裝mysql5.7的方法
這篇文章主要介紹了windows下使用命令的方式安裝mysql5.7的方法,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-01-01SQL函數(shù)實(shí)現(xiàn)Group_concat用法
GROUP_CONCAT用于將每個(gè)分組內(nèi)的值連接成一個(gè)字符串,并通過指定的分隔符進(jìn)行分隔,本文主要介紹了SQL函數(shù)實(shí)現(xiàn)Group_concat用法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫法
有時(shí)候,我們可能有這樣的場景,需要將銷量按月統(tǒng)計(jì),并且按月逐月累加,本文就來介紹一下MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫法,感興趣的可以了解一下2023-10-10MySQL中LIKE運(yùn)算符的多種使用方式及示例演示
無論是簡單的模式匹配還是復(fù)雜的模式匹配,LIKE運(yùn)算符都提供了強(qiáng)大的功能來滿足不同的匹配需求,通過本文的介紹,我們?cè)敿?xì)了解了在MySQL數(shù)據(jù)庫中使用LIKE運(yùn)算符進(jìn)行模糊匹配的多種方式,感興趣的朋友跟隨小編一起看看吧2023-07-07