如果多个用户同时运行以下查询会发生什么情况?
INSERT INTO "Retail"."Attributes"("AttributeId","AttributeCode","AttributeName")
VALUES(nextval('"Retail"."CompoundUnits_CompoundUnitId_seq"'::regclass),'COL','Color');
INSERT INTO "Retail"."AttributeDetails"
("AttributeId","AttributeDetailCode","AttributeDetailName")
VALUES
(
currval('"Retail"."CompoundUnits_CompoundUnitId_seq"'::regclass), 'COL-Red', 'Color Red'
),
(
currval('"Retail"."CompoundUnits_CompoundUnitId_seq"'::regclass), 'COL-Blu', 'Color Blue'
),
(
currval('"Retail"."CompoundUnits_CompoundUnitId_seq"'::regclass), 'COL-Gre', 'Color Green'
);
此as方法是否与SQL SERVER的SCOPE_IDENTITY()一样可靠?任何建议将不胜感激。
最佳答案
currval()
是特定于会话的。如果单独的会话增加序列,currval()将继续返回预期值。
上面说你可能想使用insert returning
:
insert into foo values (...) returning id;
insert into bar (foo_id, ...) values (:id, ...), (:id, ...), ...;