相似問題; Update SQL with consecutive numbering在PostgreSQL數據庫中生成序列號 - 併發和隔離級別
我希望能夠通過在名爲SeqNum
的表中遞增列num
來生成序列號。 SeqNum表格佈局;
|num|
|===|
| 0 |
正在運行的查詢;
BEGIN TRANSACTION
UPDATE SeqNum
SET num = num + 1
SELECT num from SeqNum
COMMIT TRANSACTION
我的問題是,如果我有運行此查詢在同一時間READ COMMITTED
隔離級別多個進程,將SELECT子句總是返回一個唯一的更新值。我假設這將是一致的,沒有兩個進程會返回相同的數量......顯然,這是所有運行在一個事務中。如果它不在事務中,我希望它可能會返回重複的值。
根據隔離級別,我不確定行爲如何改變(如果有的話)。
而不是'update;選擇''使用'update .. returning'會更好。但是,爲什麼不首先使用真正的序列呢? –