」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 SQL 中使用 INSERT ... ON DUPLICATE KEY 實作條件更新?

如何在 SQL 中使用 INSERT ... ON DUPLICATE KEY 實作條件更新?

發佈於2025-01-09
瀏覽:771

How to Implement Conditional Updates with INSERT ... ON DUPLICATE KEY in SQL?

INSERT ... ON DUPLICATE KEY 的條件更新

根據重複鍵條件插入或更新記錄是資料庫程式設計中常見的場景。但是,有時您可能需要進一步限制更新條件,使其依賴其他條件。不幸的是,INSERT ... ON DUPLICATE KEY UPDATE 語法本身並不支援條件更新的 WHERE 子句。

克服限制

要解決此限制,您可以在 UPDATE 子句中使用 IF() 函數。 IF() 函數可讓您根據給定的邏輯表達式指定替代值。

範例實作

範例實作
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
  last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);

範例實作

考慮以下 INSERT ... ON DUPLICATE KEY UPDATE查詢:

    INSERT INTO daily_events (created_on、last_event_id、last_event_created_ INTO daily_events (created_on、last_event_id、last_event_created_ INTO daily_events (created_on、last_event_id、last_event_created_ INTO ) 值 ('2010-01-19', 23, '2010-01-19 10:23:11') 關於重複金鑰更新 last_event_id = IF(last_event_created_at 在此查詢中,UPDATE 子句包含IF() 語句,該語句檢查現有的last_event_created_created_created_created_created_created 是否插入的值。如果現有值較舊,則會執行更新,以新值取代last_event_id。否則,將保留現有的last_event_id。
其他注意事項

How to Implement Conditional Updates with INSERT ... ON DUPLICATE KEY in SQL?

請記住,如果條件為 false,則 IF() 的計算結果為 NULL。因此,如果不符合條件,last_event_id 的更新值也會為 NULL。 請考慮使用附加 WHERE 子句或單獨的 UPDATE 查詢來確保對更新進行所需的篩選。

最新教學 更多>
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在Silverlight應用程序中,嘗試使用LINQ建立LINQ連接以錯誤而實現的數據庫”,無法找到查詢模式的實現。”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例...
    程式設計 發佈於2025-04-17
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-04-17
  • 如何使用Python有效地以相反順序讀取大型文件?
    如何使用Python有效地以相反順序讀取大型文件?
    在python 反向行讀取器生成器 == ord('\ n'): 緩衝區=緩衝區[:-1] 剩餘_size- = buf_size lines = buffer.split('\ n'....
    程式設計 發佈於2025-04-17
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-04-17
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-04-17
  • HTML5導航元素詳解
    HTML5導航元素詳解
    [2 代表一组导航链接的HTML5 NAV元素是增强网站可访问性的重要工具,因为它允许屏幕读取器跳过网站导航,改善视觉障碍者的用户体验。 可以在单个页面上多次使用NAV元素,用于主要导航栏和辅助链接,虽然对于所有导航链接不是强制性的,但建议主要导航块改善站点可访问性和SEO。 虽然当前的屏幕读取器可...
    程式設計 發佈於2025-04-17
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-04-17
  • Goji框架中如何解析HTML表單輸入?
    Goji框架中如何解析HTML表單輸入?
    在Web開發中的html forms中的html forms中的分析輸入,在Web開發中,從HTML表單中提取數據並在後端代碼中處理數據是一個常見的任務。在GO中,使用GOJI框架,可以通過利用NET/HTTP軟件包的強大功能來實現此過程。 接收和處理從HTML表單中提交的數據,您必須利用htt...
    程式設計 發佈於2025-04-17
  • C++內置類型真的有默認構造函數嗎?
    C++內置類型真的有默認構造函數嗎?
    是否內置類型在C? 中具有默認的構造函數,儘管TC PL中的語句聲稱內置類型具有默認的構造函數,但在C 03的上下文中的答案是細微的, “否。” 推理內置類型在傳統意義上沒有聲明構造函數。但是,可以使用類似於構造函數調用的語法初始化它們。此初始化顯示為: int x0(5); //看起來像默認構造...
    程式設計 發佈於2025-04-17
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-04-17
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-04-17
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。為了解決此問題,您正在嘗試使用“ mb_convert_encoding”和“ iconv”轉換受...
    程式設計 發佈於2025-04-17
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-04-17
  • 獲取HTML元素真實寬高方法揭秘
    獲取HTML元素真實寬高方法揭秘
    確定HTML元素的實際寬度和高度在瀏覽器的視口內的HTML元素,必須準確地計算出其尺寸。這是如何有效地檢索元素的實際寬度和高度。 使用元素屬性 兩種技術都在現代瀏覽器中支持, including:ChromeFirefoxEdgeSafariconst width = document.getEl...
    程式設計 發佈於2025-04-17
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-04-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3