亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > PostgreSQL > 正文

深入解讀PostgreSQL中的序列及其相關(guān)函數(shù)的用法

2020-03-12 23:52:42
字體:
供稿:網(wǎng)友
這篇文章主要介紹了PostgreSQL中的序列及其相關(guān)函數(shù)的用法,包括序列的更新和刪除等重要知識,需要的朋友可以參考下
 

一、簡介

序列對象(也叫序列生成器)就是用CREATE SEQUENCE 創(chuàng)建的特殊的單行表。一個序列對象通常用于為行或者表生成唯一的標(biāo)識符。

二、創(chuàng)建序列

方法一:直接在表中指定字段類型為serial 類型

david=# create table tbl_xulie (david(# id serial,david(# name text);NOTICE: CREATE TABLE will create implicit sequence "tbl_xulie_id_seq" for serial column "tbl_xulie.id"CREATE TABLEdavid=#

方法二:先創(chuàng)建序列名稱,然后在新建的表中列屬性指定序列就可以了,該列需int 類型

創(chuàng)建序列的語法:

CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]  [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]  [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]  [ OWNED BY { table.column | NONE } ]

實例:

david=# create sequence tbl_xulie2_id_seq increment by 1 minvalue 1 no maxvalue start with 1;   CREATE SEQUENCEdavid=# david=# create table tbl_xulie2 (david(# id int4 not null default nextval('tbl_xulie2_id_seq'),david(# name text);CREATE TABLEdavid=# 

三、查看序列

david=# /d tbl_xulie             Table "public.tbl_xulie" Column | Type  |            Modifiers            --------+---------+-------------------------------------------------------- id   | integer | not null default nextval('tbl_xulie_id_seq'::regclass) name  | text  | david=# /d tbl_xulie2             Table "public.tbl_xulie2" Column | Type  |            Modifiers            --------+---------+--------------------------------------------------------- id   | integer | not null default nextval('tbl_xulie2_id_seq'::regclass) name  | text  | david=#

查看序列屬性

david=# /d tbl_xulie_id_seq   
 Sequence "public.tbl_xulie_id_seq" Column   | Type  |    Value    ---------------+---------+--------------------- sequence_name | name  | tbl_xulie_id_seq last_value  | bigint | 1 start_value  | bigint | 1 increment_by | bigint | 1 max_value   | bigint | 9223372036854775807 min_value   | bigint | 1 cache_value  | bigint | 1 log_cnt    | bigint | 0 is_cycled   | boolean | f is_called   | boolean | fOwned by: public.tbl_xulie.id
david=# select * from tbl_xulie2_id_seq;
  sequence_name  | last_value | start_value | increment_by |   max_value   | min_value | cache_value | log_cnt | is_cycled | is_called -------------------+------------+-------------+--------------+---------------------+-----------+-------------+---------+-----------+----------- tbl_xulie2_id_seq |     1 |      1 |      1 | 9223372036854775807 |     1 |      1 |    0 | f     | f(1 row)

四、序列應(yīng)用

4.1 在INSERT 命令中使用序列

david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');   INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');INSERT 0 1david=# select * from tbl_xulie;
 id | name ----+------- 1 | David 2 | Sandy(2 rows)

4.2 數(shù)據(jù)遷移后更新序列

david=# truncate tbl_xulie;TRUNCATE TABLEdavid=# david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Eagle');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Miles');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Simon');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Rock'); INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Peter');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sally');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Nicole');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Monica');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Renee'); INSERT 0 1david=# select * from tbl_xulie;

 

id | name ----+-------- 15 | Sandy 16 | David 17 | Eagle 18 | Miles 19 | Simon 20 | Rock 21 | Peter 22 | Sally 23 | Nicole 24 | Monica 25 | Renee(11 rows)
david=# copy tbl_xulie to '/tmp/tbl_xulie.sql';COPY 11david=# truncate tbl_xulie;TRUNCATE TABLEdavid=# alter sequence tbl_xulie_id_seq restart with 100;ALTER SEQUENCEdavid=# select currval('tbl_xulie_id_seq'); currval 
---------   25(1 row)
david=# select nextval('tbl_xulie_id_seq'); nextval 
---------   100(1 row)
david=# select nextval('tbl_xulie_id_seq');
 nextval ---------   101(1 row)
david=# begin;BEGINdavid=# copy tbl_xulie from '/tmp/tbl_xulie.sql';COPY 11david=# select setval('tbl_xulie_id_seq', max(id)) from tbl_xulie; setval 
--------   25(1 row)
david=# end;COMMITdavid=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Flash');INSERT 0 1david=# select * from tbl_xulie;

 

id | name ----+-------- 15 | Sandy 16 | David 17 | Eagle 18 | Miles 19 | Simon 20 | Rock 21 | Peter 22 | Sally 23 | Nicole 24 | Monica 25 | Renee 26 | Flash(12 rows)
david=# select nextval('tbl_xulie_id_seq'); nextval 
---------   27(1 row)

五、序列函數(shù)

下面序列函數(shù),為我們從序列對象中獲取最新的序列值提供了簡單和并發(fā)讀取安全的方法。

5.1 查看下一個序列值

david=# select nextval('tbl_xulie_id_seq'); nextval 
---------    3(1 row)
david=# select nextval('tbl_xulie_id_seq'); nextval 
---------    4(1 row)

5.2 查看序列最近使用值

david=# select nextval('tbl_xulie_id_seq'); nextval 
---------    4(1 row)
david=# select currval('tbl_xulie_id_seq'); currval 
---------    4(1 row)
david=# select currval('tbl_xulie_id_seq'); currval 
---------    4(1 row)

5.3 重置序列

方法一:使用序列函數(shù)

a. setval(regclass, bigint)david=# truncate tbl_xulie;TRUNCATE TABLEdavid=# select setval('tbl_xulie_id_seq', 1); setval 
--------   1(1 row)
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');         INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');   INSERT 0 1david=# select * from tbl_xulie;
 id | name ----+------- 2 | Sandy 3 | David(2 rows)
david=# select currval('tbl_xulie_id_seq'); currval 
---------    3(1 row)
david=# select nextval('tbl_xulie_id_seq');
 nextval ---------    4(1 row)
b. setval(regclass, bigint, boolean)b.1 setval(regclass, bigint, true)david=# truncate tbl_xulie;TRUNCATE TABLEdavid=# select setval('tbl_xulie_id_seq', 1, true); setval 
--------   1(1 row)
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');INSERT 0 1david=# select * from tbl_xulie;
 id | name ----+------- 2 | Sandy 3 | David(2 rows)

效果同a. setval(regclass, bigint)
b.2 setval(regclass, bigint, false)david=# truncate tbl_xulie;TRUNCATE TABLEdavid=# select setval('tbl_xulie_id_seq', 1, false); setval 
--------   1(1 row)
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');INSERT 0 1david=# select * from tbl_xulie;
 id | name ----+------- 1 | Sandy 2 | David(2 rows)

方法二:修改序列

修改序列的語法:

ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]  [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]  [ START [ WITH ] start ]  [ RESTART [ [ WITH ] restart ] ]  [ CACHE cache ] [ [ NO ] CYCLE ]  [ OWNED BY { table.column | NONE } ]ALTER SEQUENCE name OWNER TO new_ownerALTER SEQUENCE name RENAME TO new_nameALTER SEQUENCE name SET SCHEMA new_schema

實例:

david=# truncate tbl_xulie;TRUNCATE TABLEdavid=# alter sequence tbl_xulie_id_seq restart with 0;ERROR: RESTART value (0) cannot be less than MINVALUE (1)david=# alter sequence tbl_xulie_id_seq restart with 1;ALTER SEQUENCEdavid=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');INSERT 0 1david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');INSERT 0 1david=# select * from tbl_xulie;

 

id | name ----+------- 1 | David 2 | Sandy(2 rows)
david=# select nextval('tbl_xulie_id_seq'); nextval 
---------    3(1 row)

六、刪除序列

語法:

DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

當(dāng)有表字段使用到PG序列時,不能直接刪除。

david=# drop sequence tbl_xulie2_id_seq;ERROR: cannot drop sequence tbl_xulie2_id_seq because other objects depend on itDETAIL: default for table tbl_xulie2 column id depends on sequence tbl_xulie2_id_seqHINT: Use DROP ... CASCADE to drop the dependent objects too.david=# drop table tbl_xulie2;DROP TABLEdavid=# drop sequence tbl_xulie2_id_seq;DROP SEQUENCEdavid=# 

說明:對于序列是由建表時指定serial 創(chuàng)建的,刪除該表的同時,對應(yīng)的序列也會被刪除。

七、其他說明 
a.currval取得的是當(dāng)前會話的序列值,在當(dāng)前會話中該值不會因為其他會話取了nextval而變化。會變化的是全局的last_value值,并且當(dāng)前會話中如果沒有讀過nextval值時直接讀currval是會報錯的。 
b.對于序列是由建表時指定serial時創(chuàng)建時,刪除該表的同時,對應(yīng)的序列也會被刪除。 
c.表主鍵數(shù)據(jù)可以用跟表相關(guān)的序列,也可以用其他序列,但不推薦,只是PG默認(rèn)它沒錯。 
d.為使多用戶并發(fā)下同一個序列取值不會重復(fù),nextval是不會rollback的,不過可以使用setval重置
如果一個序列對象是帶著缺省參數(shù)創(chuàng)建的,那么對它調(diào)用 nextval 將返回從1 開始的后續(xù)的數(shù)值。 其它的行為可以通過使用 CREATE SEQUENCE 命令里的 特殊參數(shù)獲?。粎㈤喥涿顓⒖柬摣@取更多信息。
e.為了避免從同一個序列獲取數(shù)值的當(dāng)前事務(wù)被阻塞, nextval 操作決不會回滾;也就是說,一旦一個數(shù)值已經(jīng)被抓走, 那么就認(rèn)為它已經(jīng)用過了,即使調(diào)用 nextval 的事務(wù)后面又退出了也一樣。這就意味著退出的事務(wù)可能在序列賦予的數(shù)值中留下"空洞"。 setval 操作也決不回滾。



注:相關(guān)教程知識閱讀請移步到PostgreSQL頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
中国一级片在线观看| 欧美日韩精品在线视频| 国模套图日韩精品一区二区| 国产农村妇女毛片精品久久莱园子| 成人激情四射网| 精品久久久久久久久久久| 亚洲视频tv| 污视频网站免费看| 涩涩在线视频| 国产无遮挡裸体免费久久| 欧美三级视频网站| 欧美激情精品久久久久久免费印度| 91成人短视频| 欧洲精品视频在线| 欧美激情一区二区三区免费观看| 可骚可骚的黄视频网站| 国产精品v日韩精品v欧美精品网站| 五月综合色婷婷| 久久久精品国产免费观看同学| 国外成人在线视频网站| 亚洲综合国产激情另类一区| 欧美成人综合网站| 亚洲午夜在线电影| 国产一区二区三区成人| 欧美精品亚洲精品| 日韩和欧美的一区| 日韩第一页在线| 亚洲+小说+欧美+激情+另类| 九九热精品在线| 人妻精品无码一区二区| 国产精品扒开腿做爽爽爽a片唱戏| 日韩精品麻豆| 国产自产精品| 久久精品一区二区三区资源网| 精品国产一区二区三区麻豆免费观看完整版| fc2成人免费视频| 久久狠狠婷婷| 欧美激情第8页| 极品尤物一区二区| 国产在线观看h| 成人18免费入口| 2020中文字幕在线播放| 精品国产一区二区三区在线观看| 精品一区二区三区无码视频| 日本不卡不码高清免费观看| 91丨porny丨对白| 国产美女久久久久| 久久精品在线视频| 欧美另类高清zo欧美| av电影在线地址| 欧美视频一区在线| 午夜激情福利电影| 国产农村妇女aaaaa视频| 综合久久伊人| 精品久久亚洲一级α| 日韩一区精品字幕| 中文字幕乱码一区二区三区| 在线观看精品自拍视频| 国产精品日韩欧美大师| 伊人成综合网| 国产成人精品123区免费视频| 亚洲欧美成人一区二区三区| 极品尤物一区| 四虎永久在线| 久久久久久a亚洲欧洲aⅴ| 久久久91精品国产一区二区精品| 亚洲免费观看高清完整版在线观| 国产在线播放一区三区四| 午夜精品久久久久99蜜桃最新版| 草民福利视频| 国产精品爽爽久久久久久| 中文字幕无线精品亚洲乱码一区| 色视频网站在线| 成年大片免费视频播放二级| 亚洲精品中文在线观看| 国产精品日韩无码| 精品香蕉一区二区三区| 欧美一区=区三区| av香蕉成人| 日韩电影在线免费看| 国产精品最新乱视频二区| 奇米色欧美一区二区三区| 亚洲激情免费观看| 欧美日韩精品在线一区二区| 中文字幕第20页| 999久久久精品一区二区| 免费大片在线观看www| 国产二区视频在线| 四虎影视最新网站入口在线观看| 天天爽夜夜爽视频| 亚洲经典自拍| 欧美日韩在线观看一区二区| 成人深夜在线观看| 国产亚洲精品熟女国产成人| 欧美性xxxxxx少妇| 国产亚洲第一的欧洲日产| 爱情岛论坛亚洲首页入口章节| 久久午夜精品视频| 欧美高清另类hdvideosexjaⅴ| 黄色av免费| 国产欧美日韩一区二区三区四区| 精品黄色一级片| 视频一区视频二区在线观看| 久久久久久久久久一级| 国产一区二区视频免费观看| 亚洲日本香蕉视频| 欧美乱大交做爰xxxⅹ小说| 欧美黑人国产人伦爽爽爽| 亚洲精品欧美日韩专区| 五月激情丁香一区二区三区| 国产日韩欧美一区二区三区视频| 波多野结衣av在线播放| 91麻豆精品国产91久久久久| 中文字幕成人网| 无码人妻一区二区三区精品视频| 亚洲国产精品久久久久久| 亚洲精品传媒| 日本一二三视频| 九热视频在线观看| 亚洲精品成人影院| 日韩精品诱惑一区?区三区| 最新国产成人av网站网址麻豆| 五月婷婷视频在线观看| 图片区小说区国产精品视频| 日本综合视频| 男操女在线观看| 男男一级淫片免费播放| 免费一级片91| va中文字幕| 亚欧激情乱码久久久久久久久| 999成人网| 成人精品一区二区三区电影免费| 综合图区亚洲白拍在线| 精品久久久久久久久久久久包黑料| 欧美久久99| baoyu135国产精品免费| 插插插亚洲综合网| 日韩亚洲一区在线| 欧美一区二区日韩| 亚洲精品极品少妇16p| 欧美极品视频| 日本在线高清视频一区| 美女尤物国产一区| 亚洲综合自拍一区| 日韩无套无码精品| 日韩欧美资源站| 国产成人在线免费看| 国产xxxxx| 青青青爽久久午夜综合久久午夜| 特一级黄色片| 教室别恋欧美无删减版| 日韩人妻精品无码一区二区三区| 欧美gv在线| 国产精品国产精品国产专区不卡| 日产亚洲一区二区三区| 亚洲熟妇av乱码在线观看| 中文字幕一区二区三区色视频| 亚洲精品乱码久久久久久久久久久久| 免费观看的毛片| 久久精品欧洲| 亚洲欧洲精品一区| 亚洲国产另类av| 国产精品精品视频| 亚洲欧美一区二区三区极速播放| 亚洲嫩草精品久久| 精品动漫3d一区二区三区免费版| 成人性生交大片免费观看嘿嘿视频| 91丝袜一区二区三区| 日韩精品免费在线观看| 国产在线制服美女| 日韩一级高清毛片| 9l视频自拍蝌蚪9l视频成人| 九色porny丨首页在线| 国产欧美va欧美va香蕉在线| 亚洲激情国产精品| 欧美日韩岛国| 欧美日韩精品久久久免费观看| 美女网站免费观看| 国产精品国产三级国产三级人妇| 免费黄在线观看| 成人18夜夜网深夜福利网| 亚洲精品视频区| 一菊综合网成人综合网| 国产aⅴ精品一区二区四区| 亚洲精品18在线观看| 亚洲成人a**址| 婷婷丁香综合网| 国产视频九色蝌蚪| a级免费在线观看| 怡红院男人天堂| 国产麻豆精品视频| 国产精品久久久久久久天堂第1集| 亚洲综合色区另类av| 国产精品福利小视频| 中文字幕22页| 精品欧美乱码久久久久久1区2区| 久久精品动漫| 青青操视频在线观看| 一区二区三区高清不卡| 欧美少妇在线观看| 精品奇米国产一区二区三区| 一二三四区在线观看| 色一情一区二区| 亚洲精品丝袜日韩| 91在线网址| 魔女鞋交玉足榨精调教| 成人信息集中地欧美| 97色伦图片97综合影院| 99re5久久在热线播放| av一级亚洲| 国产精品久久久久久久久免费丝袜| 成人无码精品1区2区3区免费看| 麻豆91在线| 色欧美片视频在线观看| 精品久久中文字幕| 中文字幕色一区二区| 香蕉久久一区| 色猫猫国产区一区二在线视频| 黄色a级片免费看| 欧洲不卡av| 欧美日韩中文字幕在线视频| 日韩一区精品字幕| 亚洲国产精品va在看黑人| 午夜精品久久久久久毛片| 国产欧美日韩中文| 99在线视频免费| 精品人体无码一区二区三区| 久色乳综合思思在线视频| 国产精品自拍一区| 日韩av日韩在线观看| 激情久久久久久久久久久久久久久久| 国产第一页视频| 精品国产一区二区三区久久久蜜月| 国产成人福利| 精品国精品国产尤物美女| 欧美亚洲另类色图| 一个人免费观看在线视频www| 国产精品网站一区| 久久精品视频2| 57pao成人永久免费| 亚洲免费大片在线观看| 亚洲精品中文字幕在线观看| 精品福利视频导航大全| 亚洲欧美在线一区二区| 亚洲成人黄色小说| 欧美系列一区二区| 国产精品日韩成人| 热re久久精品国产99热| 日韩av在线第一页| 亚洲一区二区色| 亚洲精品中文字幕乱码三区不卡| 免费av一级电影| 裸体一区二区| 蝌蚪91视频| 精品久久久久久亚洲| 在线视频 日韩| 亚洲猫色日本管| 亚洲女厕所小便bbb| 国产精品久久久久久亚洲毛片| 一区二区三区四区免费视频| 国产又爽又黄免费视频| 波多野结衣乳巨码无在线| 4438全国成人免费| 成人免费黄色大片| 久久久久久久久蜜桃| 久青草国产在线| 久草在线在线精品观看| 国内自拍在线观看| 精品国产一二区| 久久先锋影音av鲁色资源| 久久伊人一区二区| 国产精品igao视频网网址不卡日韩| www.亚洲欧美| 色香欲www7777综合网| 国产在线视频欧美一区| 欧美在线观看视频在线| 在线观看免费p片视频网站地址| 久久黄色美女电影| 久久久久亚洲精品国产| 91毛片在线观看| 中文字幕一区图| 久久夜夜久久| 成人综合日日夜夜| 免费的av在线| 国产精品久久久久久中文字| 精品久久国产字幕高潮| 在线观看h视频| 日本黄色一级视频| 99国产一区二区三精品乱码| 欧美亚洲在线播放| 一本之道久久| 成年人精品视频| 精品99久久久久成人网站免费| 亚洲综合色噜噜狠狠| 欧美日韩免费高清一区色橹橹| 99久久久久久中文字幕一区| 日韩视频在线永久播放| 国产大学生自拍视频| 丁香啪啪综合成人亚洲小说| 国产精品高清免费在线观看| 欧美大片在线观看一区| 97在线视频免费观看完整版| 亚洲素人一区二区| 成人精品美女隐私视频| 天堂色在线视频| 欧美黄色成人网| 国产精品亚洲无码| 5252色成人免费视频| 亚洲tv在线观看| 六月婷婷综合网| 黄页网站大全一区二区| 超碰在线97国产| 日韩一区和二区| 国产精品第108页| 日韩在线高清| 成人淫片在线看| 一级毛片免费高清中文字幕久久网| 久久久久久久免费视频了| 成人高清免费观看| 免费又黄又爽又色的视频| 亚洲 精品 综合 精品 自拍| 免费国偷自产拍精品视频| 欧美一级淫片免费视频| 日韩欧美不卡视频| 亚洲视频综合网| 亚洲区小说区| 日韩精品一级毛片在线播放| 日本欧美在线观看|