我有一个如下表:id
是PK和自动增量。
+-----+--------+--------+
| id | kind | count |
+-----+--------+--------+
当我使用upsert查询bleow时,和100同时请求该api。
INSERT INTO Views (kind, count)
VALUES(1, 1)
ON CONFLICT(kind)
DO UPDATE SET count = count + 1
我会得到:
+-----+--------+--------+
| id | kind | count |
+-----+--------+--------+
| 100 | kind-1 | 100 |
+-----+--------+--------+
2条答案
按热度按时间jw5wzhpr1#
可以如下操作
sqlite_sequence
表:其将“重置”序列到最后使用
id
。然而,这一点用处都没有。在批量UPSERT期间更新
sqlite_sequence
肯定会破坏性能,并且在操作之后这样做也不会避免键序列中的“漏洞”。另一个选择是重写所有的
id
,但是您真的需要这样做吗?w51jfk4q2#
我猜你的table是用
并且运行100次查询
INSERT INTO Views (kind, count) VALUES(1, 1) ON CONFLICT(kind) DO UPDATE SET count = count + 1
,您不会得到您所写的内容,但是可能不需要的行为是,当使用相同的插入查询插入另一个值(例如2)时,您将得到
只需删除
create table
查询中的AUTOINCREMENT
关键字,您就可以得到我认为您想要的结果,即而且,正如@DinoCoderSaurus所说,
AUTOINCREMENT
只在棘手的情况下才需要,“以防止重用以前删除的行中的ROWID”(SQLite文档)。