【发布时间】:2014-11-15 12:03:23
【问题描述】:
假设我在 PostgreSQL 中有以下存储过程。 (请注意,这不是真正的代码。我知道这可以通过另一种更好的方式完成,这只是说明我的问题的一个例子)
CREATE FUNCTION testFunction( ) RETURNS integer AS $$
DECLARE iNewID integer;
BEGIN
SELECT CurrentID INTO iNewID FROM TestTable; // statement 1
iNewID := iNewID + 1;
UPDATE TestTable SET CurrentID=iNewID; // statement 2
RETURN iNewID;
END; $$
LANGUAGE PLPGSQL;
假设两个不同的用户几乎同时运行它。他们可以返回相同的ID吗?
我将尝试用其他方式解释。在代码中,我注释了两个语句。如果两个用户同时运行它。该语句的调用顺序是什么。我能确定会是这样吗:
- 用户 A 声明 1
- 用户 A 声明 2
- 用户 B 声明 1
- 用户 B 声明 2
或者可能是这样(导致相同的ID):
- 用户 A 声明 1
- 用户 B 声明 1
- 用户 A 声明 2
- 用户 B 声明 2
我希望你能理解我的问题。我真的试图在网上搜索这个问题的答案,但没有运气。这可能是因为我没有任何名字?这叫什么?
非常感谢您的帮助。
【问题讨论】:
标签: postgresql sequence auto-increment