MySql插入一條記錄,結果提示主鍵衝突,怎麼辦?git
批量插入數據時,發現插入的這批數據中,有某些記錄存在惟一鍵衝突,一個一個跳出來就比較麻煩了,有什麼好的辦法直接忽略掉衝突的記錄麼?github
下面簡單記錄三種處理方式sql
<!-- more -->學習
某些場景下,咱們須要批量插入的數據,某些已經在DB中了,所以我但願在出現衝突時,直接跳過,把能插入的都插入就好,這種狀況下,使用ignore關鍵詞就比較合適了code
一個實際的case以下blog
insert ignore into table (xxx, xxx) values (xxx,xxx), (xxx, xxx);
執行截圖以下, 注意下面紅框中的內容,表示忽略了兩條,執行插入成功一條get
若是在批量插入中,存在衝突時,我但願用個人新數據替換舊的數據,這個時候就可使用replace into
了博客
經常使用姿式以下it
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, 其實際過程是io
在出現衝突時,但願更新某些數據,這個時候就能夠在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
沒有更新
一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛
盡信書則不如,已上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激