MySQL中on?duplicate?key?update的使用方法實(shí)例
mysql的存在就更新不存在就插入實(shí)現(xiàn)
先建數(shù)據(jù)庫表,重點(diǎn)要添加主鍵索引(id列,沒有測試)和唯一索引(branch_no列),隨便找表測試
INSERT INTO t_name ( c1, c2, c3 ) VALUES ( 1, '1', '1') ON DUPLICATE KEY UPDATE c2 = '2';
測試:
1、organ_no, branch_no, branch_name, created_by字段都不相同
2、branch_name, created_by不同
3、唯一索引branch_no不同
4、修改的值包括了唯一索引值branch_no
現(xiàn)在數(shù)據(jù)庫表內(nèi)容
1、執(zhí)行sql :organ_no, branch_no, branch_name, created_by字段都不相同
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by ) VALUES ( 1, '3', '浙江分行', '3' ) ON DUPLICATE KEY UPDATE branch_name = '江蘇分行';
因?yàn)闆]有值相同,所以一定添加
2、branch_name, created_by與表中數(shù)據(jù)不同
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by ) VALUES ( 1, '3', '海南分行', '4' ) ON DUPLICATE KEY UPDATE branch_name = '江蘇分行';
第三條數(shù)據(jù)從浙江分行改變成了江蘇分行
ON DUPLICATE KEY UPDATE 后的值是要修改的值
而這個(gè)會(huì)根據(jù)唯一索引進(jìn)行查詢,其他普通列不做匹配(主鍵也是做匹配的)
可以通過下條驗(yàn)證
3、唯一索引branch_no不同
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by ) VALUES ( 1, '4', '江蘇分行', '3' ) ON DUPLICATE KEY UPDATE branch_name = '海南分行';
除了唯一索引branch_no不同,其他列都相同
執(zhí)行后數(shù)據(jù)庫增加一條
4、修改的值包括了唯一索引值branch_no
下面對唯一索引進(jìn)行修改嘗試
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by ) VALUES ( 1, '4', '江蘇分行', '3' ) ON DUPLICATE KEY UPDATE branch_name = '海南分行', branch_no = '8';
修改branch_no 4為8,并修改branch_name為海南分行
可以看出對唯一索引和普通列都做了修改
總結(jié):
1、mysql的存在就更新不存在就插入可由on duplicate key update語法實(shí)現(xiàn);
2、不過只會(huì)檢查添加列中有沒有匹配到主鍵id和唯一索引的重復(fù)項(xiàng);
3、如果有重復(fù)項(xiàng)會(huì)在on duplicate key update后進(jìn)行修改指定的字段和內(nèi)容;
4、所涉及的唯一索引也是可以修改的;
最后也可這樣寫:
原數(shù)據(jù)庫表
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by ) VALUES ( 1, '8', '河南分行', '3' ) ON DUPLICATE KEY UPDATE branch_name = values(branch_name);
修改成了河南分行
到此這篇關(guān)于MySQL中on duplicate key update使用方法的文章就介紹到這了,更多相關(guān)MySQL on duplicate key update使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS7環(huán)境下MySQL8常用命令小結(jié)
在進(jìn)行MySQL的優(yōu)化之前必須要了解的就是MySQL的查詢過程,下面這篇文章主要給大家介紹了關(guān)于CentOS7環(huán)境下MySQL8常用命令的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06mysql踩坑之limit與sum函數(shù)混合使用問題詳解
這篇文章主要給大家介紹了關(guān)于mysql踩坑之limit與sum函數(shù)混合使用問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06低版本Druid連接池+MySQL驅(qū)動(dòng)8.0導(dǎo)致線程阻塞、性能受限
應(yīng)用升級MySQL驅(qū)動(dòng)8.0后,在并發(fā)量較高時(shí),查看監(jiān)控打點(diǎn),Druid連接池拿到連接并執(zhí)行SQL的時(shí)間大部分都超過200ms,本文就解決一下這個(gè)問題2021-07-07當(dāng)mysqlbinlog版本與mysql不一致時(shí)可能導(dǎo)致出哪些問題
這篇文章主要介紹了當(dāng)mysql服務(wù)器為mysql5.6時(shí),mysqlbinlog版本不對可能導(dǎo)致出哪些問題,下面通過模擬2種場景分析此類問題,需要的朋友可以參考下2015-07-07