MySQL 處理插入過程中的主鍵唯一鍵重覆值辦法

来源:http://www.cnblogs.com/chenmh/archive/2016/04/15/5392540.html
-Advertisement-
Play Games

介紹 本篇文章主要介紹在插入數據到表中遇到鍵重覆避免插入重覆值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下來就分別看看這三種方式的處理辦法。 IGNORE 使用ignore當插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQUE ...


介紹

本篇文章主要介紹在插入數據到表中遇到鍵重覆避免插入重覆值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下來就分別看看這三種方式的處理辦法。

 

IGNORE

使用ignore當插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQUE KEY)重覆時自動忽略重覆的記錄行,不影響後面的記錄行的插入,

創建測試表

CREATE  TABLE  Tignore
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT
)default charset=utf8;

正常的插入如果插入的記錄中存在鍵重覆會報錯,整個語句都會執行失敗

使用IGNORE如果插入的記錄中存在重覆值會忽略重覆值的該記錄行,不影響其它行的插入。

 

REPLACE

使用replace當插入的記錄遇到主鍵或者唯一鍵重覆時先刪除表中重覆的記錄行再插入。

 

REPLACE   INTO Treplace() VALUES(1,1),(1,2),(2,2);

 

創建測試表

DROP TABLE  IF EXISTS Treplace;
CREATE  TABLE  Treplace
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT
)default charset=utf8;

 從輸出的信息可以看到是4行受影響,說明它是先插入了(1,1)然後又刪除了(1,1)

 

ON DUPLICATE KEY UPDATE

當插入的記錄遇到主鍵或者唯一鍵重覆時,會執行後面定義的UPDATE操作。

相當於先執行Insert 操作,再根據主鍵或者唯一鍵執行update操作。

創建測試表

DROP TABLE  IF EXISTS Tupdate;
CREATE  TABLE  Tupdate
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT UNIQUE KEY
)default charset=utf8;
INSERT INTO Tupdate() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=NAME1+1;
INSERT INTO Tupdate() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=VALUES(NAME1)+1;

第一條語句相當於執行:

INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=NAME1+1
WHERE ID=1;

第二條語句相當於執行:

INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=2+1
WHERE ID=1;

在ON DUPLICATE KEY UPDATE後面使用VALUES指的就是插入的記錄的值,而不使用VALUES指的是表的自身值。

 

註意: ON DUPLICATE KEY UPDATE的後面執行的UPDATE更新的記錄是WHERE重覆的主鍵或者唯一鍵的ID,這點非常重要。

比如下麵這種情況:

INSERT INTO Tupdate() VALUES(1,1),(2,1) ON DUPLICATE KEY UPDATE NAME1=VALUES(ID)+1;

它是唯一鍵NAME1重覆但是主鍵不重覆,執行的語句是這樣的:

INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=2+1
WHERE ID=1;

不要認為會插入主鍵ID=2的記錄進去。

 

總結

 上面的三種處理重覆值的方法都支持標準的INSERT語法,包括INSERT INTO...VALUES, INSERT INTO ....SET ,INSERT INTO..... SELECT。

 

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接。

《歡迎交流討論》


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 1、定義游標:列出每個員工的姓名、部門名稱並編程顯示第10個到第20個記錄。 2、定義游標:從雇員表中顯示工資大於3000的記錄,只要姓名、部門編號和工資。編程顯示其中的奇數記錄。 3、計算下麵級數當末項小於0.001時的部分和。 1/(1*2)+1/(2*3)+1/(3*4)+…+1/(n*(n+ ...
  • 癥狀:前一天在MySQL中刪除了幾個不用的資料庫後登陸MySQL出現以下錯誤: mysql -u root -p passwd ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql ...
  • 轉載: http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html http://www.runoob.com/sqlite/sqlite-tutorial.html ...
  • 資料庫系統的 三級模式結構 資料庫系統是由外模式,模式和內模式三級構成 1.模式(schema) 模式也稱邏輯模式,是資料庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。 2.外模式(external schema) 外模式也稱子模式(subschema)或用戶模式,它是資料庫用戶(包 ...
  • SQLite的SQL語法 SQLite的SQL語法 SQLite庫可以解析大部分標準SQL語言。但它也省去了一些特性並且加入了一些自己的新特性。這篇文檔就是試圖描述那些SQLite支持/不支持的SQL語法的。查看關鍵字列表。 如下語法表格中,純文本用藍色粗體顯示。非終極符號為斜體紅色。作為語法一部分 ...
  • 官網上面的例子是在phoenix-4.6.0-HBase-1.1-client.jar完成的,這個jar包含了phoenix4.6連接hbase1.1.2所有的依賴,真是包羅萬象(裡面竟然還包括了servlet)。如下圖: 如果把這個jar放入到工程中,必然與現有工程諸多jar產生衝突。 經查找資料... ...
  • 寫在前面的話:之前做的一個項目,資料庫及系統整體構架設計完成之後,和弟兄們經過 一段時間的編碼,系統如期上線,剛開始運行一切良好,後來隨著數據量的急劇膨脹,慢慢出現了很多莫名其妙的問題,經過調試,修改了資料庫中幾個存儲過程的 一些問題。有意思的是,有一個存儲過程里,為了實現一個小的功能,寫了好多好多 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...