sqlite - 在 SQLite 中使用带有自动增量键的 upsert 时如何避免使用 key-id?
问题描述
我有一个如下表:
是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_sequence
像这样操作表:
UPDATE sqlite_sequence SET seq=(SELECT MAX(id) FROM Views) WHERE name="Views"
这会将序列“重置”为上次使用id
的 .
然而,这根本没有用。在批量 UPSERT 期间更新sqlite_sequence
肯定会破坏性能,并且在操作后这样做不会避免键序列中的“漏洞”。
另一种选择是重写 all id
,但你真的需要这样吗?
推荐阅读
- excel - 如何在循环中仅复制前 4 列
- javascript - 如何使用javascript将光标移动到内容可编辑表单内的父级?
- visual-studio-code - 视觉工作室代码:无法编辑 keybingings.json “无法在只读编辑器中编辑”
- google-cloud-platform - Google Cloud Platform 如何更改客户端 ID 的计费项目 ID
- mysql - Mysql从不同的服务器数据库添加外键
- python - 用于查找 302 重定向的 Python 脚本?
- mediawiki - 如何将 mysql 数据库从 mediawiki 1.14.0 迁移到 mediawiki 1.32.0?
- python - 为什么要在函数调用中创建变量?
- php - 在 WooCommerce 中添加微调器以添加到购物篮和下订单按钮
- node.js - How to redirect after an error in Express