代码之家  ›  专栏  ›  技术社区  ›  Alexey Romanov

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

  •  2
  • Alexey Romanov  · 技术社区  · 15 年前

    我在SQLite 3中有一个表:

    CREATE TABLE foo
    (
    bar TEXT
    );
    

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

    3 回复  |  直到 15 年前
        1
  •  0
  •   Community Mohan Dere    8 年前

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

        2
  •  3
  •   KARASZI István    15 年前

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

    在这种情况下创建表:

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

    或者亚历克西发现了, 没有

    INSERT OR REPLACE INTO foo (rowid, bar) VALUES (1, ?);
    
        3
  •  1
  •   Ash Burlaczenko    15 年前

    你可以这样做

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

    希望这有帮助。