【问题标题】:Sqlite - smart insert or replace querySqlite - 智能插入或替换查询
【发布时间】:2017-02-13 20:35:42
【问题描述】:

我有一个关于 sqlite 的问题。

假设我创建了一个表:

CREATE TABLE GOODS(ID TEXT  PRIMARY KEY NOT NULL, TYPE TEXT, VERSION INTEGER)

然后过一段时间我想像这样使用“插入或替换”:

insert or replace into GOODS(ID, TYPE,VERSION) values ('chrome_id', 'chrome', 15);

但我希望这个查询“替换”如果 old.VERSION

我该怎么做?

我是否需要使用 2 个查询(应该如下所示:)?

1. get row
if(row.VERSION < myVersion){
2. insert or replace ... 
}

我听说过触发器,但我确实认为这是解决方案。 谢谢

【问题讨论】:

  • 没有。如果找不到,则 REPLACE INTO 将插入该值,如果找到则更新它。您需要一个 command(查询只是 SELECT)。
  • 据我所知,替换是:DELETE + INSERT。当我写“我该怎么做?”我实际上是指一个命令,所以当你说我需要一个命令时你是什么意思你到底是什么意思? @Rotwang
  • 您需要一个命令 (REPLACE INTO)。它在幕后做什么来完成你的命令不是你的事。你告诉它执行一个命令,它会为你执行两个
  • 所以你说我需要类似的东西:替换成 GOODS(ID, TYPE,VERSION) 值 ('chrome_id', 'chrome', 15) where VERSION

标签: sqlite


【解决方案1】:

使用INSERT statement 的SELECT 形式能够控制插入的行数:

INSERT OR REPLACE INTO Goods(ID, Type, Version)
SELECT 'chrome_id', 'chrome', 15
WHERE NOT EXISTS (SELECT *
                  FROM Goods
                  WHERE ID = 'chrome_id'
                    AND Version >= 15);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多