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