我有一个包含4列的简单表格(ID(自动生成),ip,日期,访问次数)
前:
1,'10 .10.0.10','2017-03-01',1
我在SQLite中寻找插入或更新,需要检查ip&日期列,如果存在更新访问次数+1,则插入新行。
我可以发出2个sql,但想把它保存在1个sql中。
这在SQLite中是否可行?
答案 0 :(得分:2)
如果您为IP和日期生成uniqe索引,则可以使用insert or replace
语句分两步完成此操作:
为IP和日期执行insert or replace
(在此示例中我使用命名参数;您需要将它们绑定到适当的值):
insert or replace into Visits (id, ip, date, visits)
values (NULL, :ip, :date, :visits + 1);
您可以添加表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;