gpt4 book ai didi

mysql - 在同一个表中管理多个累进数字

转载 作者:行者123 更新时间:2023-11-29 04:42:49 24 4
gpt4 key购买 nike

我有一个这样的表来管理多用户应用程序中收据累进编号的生成:

ID                 | Int(11) Auto increment, primary
Progressive_number | Int(11)
External_ID | Int(11)

progressive 必须相对于 External_ID 队列,External_ID 表示对外部表的主 ID 的引用。例如:

ID | Prog | ExtID
1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
4 | 3 | 1
5 | 4 | 1
6 | 2 | 2

至此很容易,但问题是累进数在队列中必须是唯一的,而且很多用户可以同时生成

我的第一个想法是读取最后一个 Progressive,然后插入增量,如下所示:

SELECT MAX(Progressive_number) FROM table WHERE External_id = 2

但是从一些压力测试来看,在我执行连续的 INSERT 查询之前,其他人可以读取相同的值然后执行相同的 INSERT,所以我最终得到两张具有相同累进编号的收据

我试过嵌套查询

INSERT INTO table (Progressive_number, External_ID) 
VALUES(
(SELECT MAX(Progressive_number) FROM table WHERE External_id = 2) + 1,
1)

我有很多重复项,但对于这种应用程序来说,一个重复项太多了。

有一种方法可以将生成完全卸载到 mysql 服务器以确保任何数字都是唯一的?

最佳答案

您是否尝试过在读写操作期间锁定表?

LOCK TABLES table WRITE;
INSERT INTO table (Progressive_number, External_ID)
VALUES(
(SELECT MAX(Progressive_number) FROM table WHERE External_id = 2) + 1,
1)
;
UNLOCK TABLES;

(另请参阅有关 LOCK TABLES 的文档:http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-transactions.html)

关于mysql - 在同一个表中管理多个累进数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912247/

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