在SQLite中插入或更新

时间:2017-03-01 17:14:28

标签: sqlite

我有一个包含4列的简单表格(ID(自动生成),ip,日期,访问次数)

前:

1,'10 .10.0.10','2017-03-01',1

我在SQLite中寻找插入或更新,需要检查ip&日期列,如果存在更新访问次数+1,则插入新行。

我可以发出2个sql,但想把它保存在1个sql中。

这在SQLite中是否可行?

1 个答案:

答案 0 :(得分:2)

如果您为IP和日期生成uniqe索引,则可以使用insert or replace语句分两步完成此操作:

  1. 尝试查询当前的IP和日期访问次数;如果找不到记录,则设置为0。
  2. 为IP和日期执行insert or replace(在此示例中我使用命名参数;您需要将它们绑定到适当的值):

    insert or replace into Visits (id, ip, date, visits)
    values (NULL, :ip, :date, :visits + 1);
    
  3. 您可以添加表contstraint来创建唯一索引,如下例所示,或者使用单独的create unique index语句:

    create table Visits (..., unique (ip, date));
    

    附录:甚至可以在一个查询中更新访问次数:

    insert or replace into Visits (id, ip, date, visits)
        select NULL, :ip, :date, ifnull(max(visits), 0) + 1
        from Visits
        where ip = :ip and date = :date;