插入或更新混淆

时间:2010-10-30 17:41:22

标签: sql database sqlite

我对如何处理在sqlite中存在更新行的情况感到有点困惑,如果不存在则插入它。我似乎在这个问题的每个答案上看到了不同的解决方案。什么是最有效或最简单的方法? 编辑:我的意思是sqlite,对不起

2 个答案:

答案 0 :(得分: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,您可以upsert执行INSERT OR REPLACE

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

由于已经存在条形等于1的行,而不是插入新行,因此baz的值更新为3.


对于MySQL:

在表上创建一个UNIQUE索引。 然后使用

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

这要求mytable中的(field1,field2)对是唯一的。 然后,当您插入时,您将获得一个新行,或者,如果mytable中已存在(val1,val2),则将更新field3的值。

答案 1 :(得分:0)

如果EXISTS在这里可能有用,如果条件产生true则更新,如果为false则更新。