postgresql獲得一個插入的序列號的值
阿新 • • 發佈:2018-12-22
1)我如何獲得一個插入的序列號的值?
一種方法是在插入之前先用函式 nextval() 從序列物件裡檢索出下一個 SERIAL 值,然後再顯式插入。可用偽碼這樣描述:
new_id = execute("SELECT nextval('person_id_seq')"); execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
這樣還能在其他查詢中使用存放在 new_id 裡的新值(例如,作為 person 表的外來鍵)。 注意自動建立的 SEQUENCE 物件的名稱將會是 <table
類似的,在 SERIAL 物件預設插入後你可以用函式 currval() 檢索剛賦值的 SERIAL 值,例如:
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
2)使用 currval() 會導致和其他使用者的衝突情況(race condition)嗎?
不會。currval() 返回的是你本次會話程序所賦的值而不是所有使用者的當前值。