gpt4 book ai didi

mysql - 在 MYSQL 中创建不带 AUTO_INCRMENT 的序列方案

转载 作者:行者123 更新时间:2023-11-29 06:36:53 25 4
gpt4 key购买 nike

我想运行一个范围为每个客户端的序列,以便它们每个都有一系列从 1 开始的 ID:

Clients:
+----+-------+
| id | name |
+----+-------+
| 1 | Dave |
| 2 | Sarah |
+----+-------+

Tickets:
+----+-----------+----------+----------------------------+
| id | clientID | sequence | title |
+----+-----------+----------+----------------------------+
| 1 | 1 | 1 | Title 1 |
| 2 | 1 | 2 | Another title for Client 1 |
| 3 | 2 | 1 | Different Title |
+----+-----------+----------+----------------------------+

执行此操作的最佳方法是什么(就速度和数据完整性而言)?插入后我有这样的东西:

为戴夫添加新票

SELECT COALESCE( (MAX(sequence) + 1), 1) as nextSeq WHERE id = 1 FROM tickets

然后

INSERT INTO tickets (... sequence) VALUES (... nextSeq)

COALESCE 的用途是什么?

当记录是其系列中的第一个记录时,MAX() 将返回空,因此默认空为 1。

为什么我需要用户范围的序列号?

这是一个文档捕获系统,显示大量表格数据,我有多个实体;系统、风险、工单、流程,我使用带有标题的数字来帮助用户跟踪他们的记录。在表中,初始结果将按此 ID 排序,因此我不需要全局 ID 编号。我将 auto_incremented 列留给其他后端操作、连接、私有(private)引用等。

最佳答案

您可以将其作为一个语句来执行

   INSERT 
INTO ticket (clientID, sequence, title)
SELECT clientID,
MAX(sequence) + 1,
"Dave's New Ticket"
FROM ticket
WHERE clientID = 1 /** Dave */
GROUP BY clientID

..但我不完全确定与两个单独的语句相比的性能。注意,GROUP BY 在 MySQL 中实际上是可选的

还值得质疑的是,序列号本身是否绝对必要,以及您想用它来完成什么

关于mysql - 在 MYSQL 中创建不带 AUTO_INCRMENT 的序列方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53433397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com