PostgreSQL 序列使用

來源:互聯網
上載者:User

標籤:全域   new   bsp   rda   last   指定欄位   主鍵   height   san   

資料庫中主鍵的產生一般是通過序列來產生,PG的序列知識主要羅列如下:

如何找到序列的名稱:用pgadmin開啟當前所用資料庫,在schemas->sequences下找到相關的序列,然後SELECTnextval(‘im_indicator_results_seq‘);查看當前的序號,在去相關的表中查看已有的最大序號,如:selectmax(result_id) from im_indicator_results;,最後設定當前序號為最大序號SELECTsetval(‘im_indicator_results_seq‘, 5288);

方法a:直接在表中指定欄位類型是 SERIAL 類型就一了

CREATE TABLE person (   id   SERIAL,   name TEXT  );
CREATE SEQUENCE person_id_seq; CREATE TABLE person ( id INT4 NOT NULL DEFAULT nextval(‘person_id_seq‘), name TEXT ); SELECT currval(‘person_id_seq‘) ; SELECT nextval(‘person_id_seq‘) ; select last_value from person_id_seq; select setval(seq_name,new_seq_value);
   SELECT setval(‘foo‘, 42);    --下次nextval將返回43    SELECT setval(‘foo‘, 42, false);   --下次nextval將返回42

drop table table_name; 
drop sequence seq_name;

a.currval取得的是當前會話的序列值,在當前會話中該值不會因為其他會話取了nextval而變化。會變化的是全域的last_value值,並且當前會話中如果沒有讀過nextval值時直接讀currval是會報錯的。 
b.對於序列是由建表時指定serial時建立時,刪除該表的同時,對應的序列也會被刪除。 
c.表主鍵資料可以用跟表相關的序列,也可以用其他序列,但不推薦,只是PG預設它沒錯。 
d.為使多使用者並發下同一個序列取值不會重複,nextval是不會rollback的,不過可以使用setval重設

PostgreSQL 序列使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.