gpt4 book ai didi

甲骨文 (PL/SQL) : Is UPDATE RETURNING concurrent?

转载 作者:行者123 更新时间:2023-12-04 17:41:28 25 4
gpt4 key购买 nike

我正在使用带有计数器的表来确保子元素上的唯一 ID。

我知道使用序列通常更好,但我不能使用它,因为我有很多计数器(客户可以创建几个桶,每个桶都需要有自己的计数器,他们必须从1(这是一项要求,我的客户需要“人类可读”的 key )。

我正在创建具有 prikey (bucket_id, num = counter) 的记录(我们称之为项目)。

我需要保证 bucket_id/num 组合是唯一的(所以使用序列作为 prikey 不会解决我的问题)。

行的创建不会在 pl/sql 中发生,所以我需要声明这个数字(顺便说一句:有间隙并不违反要求)。

我的解决方案是:

   UPDATE bucket
SET counter = counter + 1
WHERE id = param_id
RETURNING counter INTO num_forprikey;

PL/SQL 返回 var_num_forprikey 以便可以创建项目记录。

问题:

我会 总是 即使用户同时要求存储桶中的新项目,也能获得唯一的 num_forprikey 吗?

最佳答案

Will I always get unique num_forprikey even if the user concurrently asks for new items in a bucket?



是的,至少在一定程度上是这样。第一个发出该更新的用户会获得该行的锁定。因此,在用户 numero uno 提交(或回滚)之前,没有其他用户可以成功发出相同的语句。所以唯一性是有保证的。

显然,cavil 是关于并发性的。您对该行的访问是序列化的,因此两个用户无法同时获得新的 PRIKEY。这不一定是问题。这取决于您有多少用户创建新项目,以及他们这样做的频率。一个用户在同一 session 中剥离数字不会注意到任何事情。

关于甲骨文 (PL/SQL) : Is UPDATE RETURNING concurrent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930704/

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