在SQLite中模擬MySQL的ON DUPLICATE KEY UPDATE
SQLite 缺少 MySQL 的 ON DUPLICATE KEY UPDATE 子句的直接等效項,該子句可以對具有預先定義唯一約束的記錄進行高效的更新和插入。但是,可以透過替代方法實現類似的效果。
替代方法
為了在 SQLite 中模擬 upsert,可以使用兩種主要方法:
SELECT (INSERT 或 UPDATE):
UPDATE( 如果 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中文網其他相關文章!