在 SQLite 中插入或更新
Posted
技术标签:
【中文标题】在 SQLite 中插入或更新【英文标题】:Insert or update in SQLite 【发布时间】:2017-03-01 17:14:27 【问题描述】:我有一个包含 4 列的简单表格(ID(自动生成)、ip、日期、访问次数)
例如:
1,'10.10.0.10', '2017-03-01',1
我正在寻找 SQLite 中的插入或更新,它需要检查 ip 和日期列,如果存在更新访问 +1 否则插入新行。
我可以发出 2 个 sql,但想将其保留在 1 个 sql 中。
这在 SQLite 中可行吗?
【问题讨论】:
【参考方案1】:如果您为 IP 和日期生成唯一索引,您可以使用 insert or replace
语句分两步实现:
-
尝试查询当前访问次数为IP和日期;如果未找到记录,则设置为 0。
对 IP 和日期执行 insert or replace
(我在此示例中使用命名参数;您需要将它们绑定到适当的值):
insert or replace into Visits (id, ip, date, visits)
values (NULL, :ip, :date, :visits + 1);
您可以添加一个表约束来创建唯一索引,如下例所示,或者您使用单独的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;
【讨论】:
以上是关于在 SQLite 中插入或更新的主要内容,如果未能解决你的问题,请参考以下文章