我要运行一个序列,作用域为每个客户机,以便它们都有一系列从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)
凝聚是为了什么?
当记录在其序列中第一个时,max()将返回空,因此默认值为1。
为什么我需要一个用户范围的序列号?
它是一个文档捕获系统,显示大量表格数据,我有多个实体;系统、风险、票证、流程和我使用带有标题的数字来帮助用户跟踪他们的记录。在表中,初始结果将按此id排序,因此我不需要全局id编号。我将自动递增列留给其他后端操作、联接、私有引用等。
1条答案
按热度按时间hjzp0vay1#
你可以这样做作为一个声明
.. 但与两个单独的声明相比,我不完全确定它的性能。注意,groupby在mysql中实际上是可选的
同样值得质疑的是,序列号本身是否绝对必要,以及您试图用它来实现什么