首頁 > 資料庫 > mysql教程 > 如何在 SQLite 中高效率模擬 MySQL 的 ON DUPLICATE KEY UPDATE?

如何在 SQLite 中高效率模擬 MySQL 的 ON DUPLICATE KEY UPDATE?

Linda Hamilton
發布: 2025-01-15 14:09:43
原創
479 人瀏覽過

How to Efficiently Emulate MySQL's ON DUPLICATE KEY UPDATE in SQLite?

在SQLite中模擬MySQL的ON DUPLICATE KEY UPDATE

SQLite 缺少 MySQL 的 ON DUPLICATE KEY UPDATE 子句的直接等效項,該子句可以對具有預先定義唯一約束的記錄進行高效的更新和插入。但是,可以透過替代方法實現類似的效果。

替代方法

為了在 SQLite 中模擬 upsert,可以使用兩種主要方法:

  1. SELECT (INSERT 或 UPDATE):

    • 執行 SELECT 查詢以檢查記錄是否存在。
    • 如果記錄存在,則執行 UPDATE 查詢以遞增 hits 欄位。
    • 如果記錄不存在,則執行 INSERT 查詢以建立記錄。
  2. UPDATE( 如果 UPDATE 失敗則 INSERT):

    • 嘗試執行 UPDATE 查詢以遞增現有記錄的 hits 欄位。
    • 如果 UPDATE 查詢因記錄不存在而失敗,則執行 INSERT 查詢以建立記錄。

建議方法

兩種方法各有優缺點,但第二種方法(使用 UPDATE( 如果 UPDATE 失敗則 INSERT))通常更有效率。它只需要單一資料庫操作,並且避免了不必要的 SELECT 查詢。

建議的程式碼片段

這是一個使用 "ip" 列上的唯一約束實現第二種方法的建議程式碼片段:

<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
登入後複製

或者,來自另一個 Stack Overflow 解決方案的以下程式碼片段提供了另一個有效的 upsert 實作:

<code class="language-sql">INSERT INTO visits (ip, hits)
VALUES ($ip, COALESCE((SELECT hits FROM visits WHERE ip LIKE $ip), 0) + 1);</code>
登入後複製

以上是如何在 SQLite 中高效率模擬 MySQL 的 ON DUPLICATE KEY UPDATE?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板