2010-10-30 112 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