2010-10-30 219 views
3

我對如何處理更新sqlite中存在的行的情況有點困惑,或者如果它不存在,就插入它。對於這個問題的每一個答案,我似乎都看到了不同的解決方案。什麼是最有效或最簡單的方法? 編輯:我的意思是sqlite,對不起插入或更新混淆

回答

0

如果EXISTS在這裏可能會有所幫助,如果條件成立爲true,或者如果爲false,則更新。

3

SQLite的:

CREATE TABLE foo (bar INTEGER UNIQUE, baz INTEGER) 
INSERT INTO foo (bar,baz) VALUES (1, 2) 

這應該引起IntegrityError:列巴是不是唯一的:

INSERT INTO foo (bar,baz) VALUES (1,3) 

但使用SQLite你做INSERT OR REPLACE可以upsert

INSERT OR REPLACE INTO foo (bar,baz) VALUES (1,3) 

代替inser婷一個新行,因爲與酒吧等於1的行已經存在,巴茲的值更新爲3


對於MySQL:

在表上創建唯一索引。 然後使用

INSERT INTO table (...) values (...) ON DUPLICATE KEY UPDATE field = ... 

例如:

CREATE UNIQUE INDEX mytable_index ON mytable (field1,field2) 

INSERT INTO mytable (field1,field2,field3) values (val1,val2,val3) 
    ON DUPLICATE KEY UPDATE field3 = val3 

這要求(FIELD1,FIELD2)在mytable的對是唯一的。 然後當你插入時,你會得到一個新的行,或者,如果(val1,val2)已經存在於mytable中,則field3的值將被更新。

+0

老鼠,我的意思是SQLite – Vortol 2010-10-30 20:24:22

+0

我喜歡單詞「UPSERT」,他們應該把它作爲一個標準的SQL命令。 UPSERT INTO foo ... – CashCow 2011-02-09 15:23:06