如果行为空,则将行插入表中,如果不在SQLite中,则替换现有行

时间:2010-10-20 10:26:35

标签: sql sqlite

我在SQLite 3中有一个表:

CREATE TABLE foo
(
bar TEXT
);

它总是有0或1行。我想编写一个查询,如果有1行则更新行,如果有0则添加行。最简单的方法是什么?

3 个答案:

答案 0 :(得分:2)

如果您可以再添加一个唯一字段,则可以:

INSERT OR REPLACE INTO foo (id, bar) VALUES (1, ?);

在这种情况下创建表:

CREATE TABLE foo (id INTEGER NOT NULL, bar TEXT, UNIQUE (id));

或者当Alexey发现它时,没有主键:

INSERT OR REPLACE INTO foo (rowid, bar) VALUES (1, ?);

答案 1 :(得分:1)

您可以执行类似

的操作
IF (SELECT COUNT(*) FROM foo) = 0  
    BEGIN  
        INSERT INTO foo VALUES ('text')  
    END  
ELSE  
    BEGIN  
        UPDATE foo SET baa = 'text' 
    END

希望这有帮助。

答案 2 :(得分:1)

采用here描述的方法,为表提供主键,并使用INSERT OR IGNORE语法,始终使用相同的键值。