180710-MySql插入唯一鍵沖突的三種可選方式


logo

MySql插入時唯一鍵沖突的幾種處理方式

MySql插入一條記錄,結果提示主鍵沖突,怎么辦?

批量插入數據時,發現插入的這批數據中,有某些記錄存在唯一鍵沖突,一個一個跳出來就比較麻煩了,有什么好的辦法直接忽略掉沖突的記錄么?

下面簡單記錄三種處理方式

I. 插入時唯一鍵沖突問題

1. Ignore關鍵詞

某些場景下,我們需要批量插入的數據,某些已經在DB中了,因此我希望在出現沖突時,直接跳過,把能插入的都插入就好,這種情況下,使用ignore關鍵詞就比較合適了

一個實際的case如下

insert ignore into table (xxx, xxx) values (xxx,xxx), (xxx, xxx);

執行截圖如下, 注意下面紅框中的內容,表示忽略了兩條,執行插入成功一條

image.png

2. Replace Into方式

如果在批量插入中,存在沖突時,我希望用我的新數據替換舊的數據,這個時候就可以使用replace into

常用姿勢如下

replace into `user` (`id`, `name`, `create_at`, `update_at`) 
values
	(1, 'test', '2018-07-10 18:54:00', '2018-07-10 19:54:52'),
	(2, 'test2', '2018-07-10 18:54:00', '2018-07-10 19:54:52'),
	(3, 'test3', '2018-07-10 18:54:00', '2018-07-10 19:54:52');

執行截圖如下,注意紅框中,當某條記錄沖突之后並修改,則影響行數為2, 其實際過程是

  • 刪除沖突數據
  • 插入新的數據

image.png

3. ON DUPLICATE KEY UPDATE

在出現沖突時,希望更新某些數據,這個時候就可以在insert語句的最后加上on duplicate key update

實例如下

insert into `user` (`id`, `name`, `create_at`, `update_at`) values (1, 'test0', '2018-07-10 18:54:00', '2018-07-10 18:54:52') ON DUPLICATE KEY UPDATE `update_at`='2018-07-10 19:58:05';

執行截圖如下,這個是在原記錄的基礎上執行更新指定的value, 比如上面的插入中,當沖突時,我們只更新update_at字段,而name的test0沒有更新

image.png

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

QrCode


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM