[在SQLite中使用带有自动增量键的upsert时如何避免使用key-id?

问题描述 投票:0回答:1

我有一个如下表:

id是PK并且自动递增。

+-----+--------+--------+
| id  |  kind  |  count |
+-----+--------+--------+

[当我使用upsert查询时,并且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  |
+-----+--------+--------+
sqlite upsert
1个回答
0
投票

可以像这样操作sqlite_sequence表:

UPDATE sqlite_sequence SET seq=(SELECT MAX(id) FROM Views) WHERE name="Views"

将“重置”序列到最后使用的id

但是,这根本没有用。在批量UPSERT期间更新sqlite_sequence将确保中断性能,并且在操作后执行该操作无法避免键序列中的“漏洞”。

另一个选择是重写全部id,但您真的需要吗?

© www.soinside.com 2019 - 2024. All rights reserved.