最近在寫sqilte語句更新數據時發現個問題,那就是Replace into執行時居然會把id主鍵修改了。google了一下,原來Replace的原理是找到待修改的記錄后,整條刪除,然后插入新記錄。所以這個過程中,默認的id主鍵會被修改。有時候這種結果并不是我們所想要的,應該如何解決呢?
http://stackoverflow.com/questions/2717590/sqlite-upsert-on-duplicate-key-update這里有很好的討論。
個人覺得以下方法最好,摘抄如下。
INSERT OR REPLACE INTO page (id, name, title, content, author)
SELECT old.id, new.name, new.title, old.content, new.author
FROM ( SELECT
"about" AS name,
"About this site" AS title,
42 AS author
) AS new
LEFT JOIN (
SELECT id, name, content
FROM page WHERE name= "about"
) AS old ON new.name = old.name;