PostgreSQL Sequence序列的使用詳解
PostgreSQL是一種關系型數據庫,和Oracle、MySQL一樣被廣泛使用。平時工作主要使用的是PostgreSQL,所以有必要對其相關知識做一下總結和掌握,先總結下序列。
一、 Sequence序列
Sequence是一種自動增加的數字序列,一般作為行或者表的唯一標識,用作代理主鍵。
1、Sequence的創建
例子:創建一個seq_commodity,最小值為1,最大值為9223372036854775807,從1開始,增量的步長為1,緩存為1的循環排序Sequence。
SQL語句如下:
CREATE SEQUENCE seq_commodity INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1 CYCLE; // 循環,表示到最大值後從頭開始
2、查找Sequence中的值
SELECT nextval('seq_commodity');
這裡nextval表示下一個值
3、修改 Sequence
用alter sequence來修改,除瞭start以外的所有sequence參數都可以被修改,
alter sequence 的例子 (SQL語句)
ALTER SEQUENCE seq_commodity INCREMENT 10 MAXVALUE 10000 CYCLE NOCACHE ;
當然如果想要修改start的值,可以先用 drop sequence刪掉,然後再重新創建。
4、刪除Drop Sequence
DROP SEQUENCE seq_commodity;
5、Sequence分配策略
調用select nextval(seq_ commodity);返回下一個序列號後,系統優先給用戶分配一個序號,接著系統的次Sequence立刻加上設置的步長(increment 1),不論此序號用戶是否使用;
調用select currval(seq_ commodity);返回當前的序列號,該序列號隻要沒有被使用,就不會變化,如果當前請求一直使用,那麼不會再分配給其他的請求,因為該序列號已經分配給當前請求。
補充:PostgreSQL 獲取 SEQUENCE 列表
我就廢話不多說瞭,大傢還是直接看代碼吧~
SELECT "c"."relname" FROM "pg_class" "c" WHERE "c"."relkind" = 'S';
結束~
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Oracle中的序列SEQUENCE詳解
- postgresql 導入數據庫表並重設自增屬性的操作
- Postgresql數據庫之創建和修改序列的操作
- 解決postgresql 序列跳值的問題
- PostgreSQL自增主鍵用法及在mybatis中的使用教程