SQLite Upsert:鏡像 MySQL 的 ON DUPLICATE KEY UPDATE 功能
MySQL 的 ON DUPLICATE KEY UPDATE
簡化了基於唯一鍵約束的插入或更新行。 如果鍵唯一,則此單一查詢插入新行;如果發現重複鍵,則更新現有行。 SQLite 缺乏這種直接的等價物。
SQLite 中更新插入的解決方法
SQLite 提供了替代策略來實現相同的結果:
1。 選擇然後插入或更新:
此方法使用兩個查詢:
SELECT
查詢,用於檢查是否存在具有給定鍵的行。 INSERT
或 UPDATE
查詢,取決於 SELECT
查詢的結果。 此方法需要兩次資料庫交互,可能會影響效能。
2。 失敗時更新,然後插入:
這涉及帶有錯誤處理的單一 UPDATE
查詢:
UPDATE
表示現有行,且資料已更新。 UPDATE
(由於行不存在)會觸發INSERT
查詢。 雖然這將資料庫呼叫減少到一次,但需要對失敗的 INSERT
嘗試進行額外的錯誤處理(例如,由於重複的鍵)。
最佳 SQLite 更新插入策略
最高效、最強大的 SQLite upsert 方法結合了 INSERT OR IGNORE
和 UPDATE
:
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
這需要對「ip」欄位進行 UNIQUE
或 PRIMARY KEY
約束。 INSERT OR IGNORE
嘗試插入;如果存在重複的鍵,它將被默默地忽略。 隨後的 UPDATE
然後會增加現有行的命中計數器。 此解決方案既提高了效率(單一資料庫往返),又避免了重複鍵插入造成的錯誤。
以上是如何在SQLite中實作MySQL的ON DUPLICATE KEY UPDATE功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!