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

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

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

2020-01-31 15:22:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、簡(jiǎn)介

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

二、創(chuàng)建序列

方法一:直接在表中指定字段類(lèi)型為serial 類(lèi)型

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)建序列名稱(chēng),然后在新建的表中列屬性指定序列就可以了,該列需int 類(lèi)型

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

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 } ]

實(shí)例:

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ù),為我們從序列對(duì)象中獲取最新的序列值提供了簡(jiǎn)單和并發(fā)讀取安全的方法。

5.1 查看下一個(gè)序列值

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)

方法二:修改序列

修改序列的語(yǔ)法:

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

實(shí)例:

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)

六、刪除序列

語(yǔ)法:

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

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

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=# 

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

中文日韩在线| 欧美日韩高清不卡| 在线视频欧美精品| 欧美顶级少妇做爰| 日韩精品高清在线观看| 秋霞成人午夜鲁丝一区二区三区| 综合久久2023| 九九热精品在线| 日韩精品极品视频在线观看免费| sese综合| 国产一区二区三区四区五区3d| 中文字幕永久在线不卡| 亚洲最大成人在线| 激情图区综合网| 麻豆视频传媒入口| 精品手机在线视频| 在线 亚洲欧美在线综合一区| av每日在线更新| 国产欧美va欧美不卡在线| 黄动漫在线观看| 亚洲一区二区四区蜜桃| 国产欧美在线一区二区| 欧美军同video69gay| www.超碰在线观看| 久久久久久中文字幕| 国产人成精品| 伊人久久大香线蕉av一区| 成人午夜小视频| 无码小电影在线观看网站免费| 在线看黄的网站| 欧美精品在欧美一区二区少妇| 久久裸体视频| 国产在线免费看| 国产免费叼嘿网站免费| 国内精品国产成人国产三级粉色| 欧美国产日韩亚洲一区| 日韩精品美女| 欧美黑人xxxⅹ高潮交| 国产麻豆综合视频在线观看| 99re热这里只有精品免费视频| 91精品国产成人观看| 日韩免费在线看| 久久中文娱乐网| 色网站免费在线观看| 欧美男gay| 99re6在线视频精品免费| 亚洲小视频在线观看| 亚洲一区二区在线视频| www成人啪啪18软件| 美洲精品一卡2卡三卡4卡四卡| 日韩精品一区二区三区免费观看| 波多野结衣在线观看| 欧美一区二区在线视频观看| 狠狠艹夜夜干| jizz在线视频| 亚洲日韩欧美一区二区在线| 国产乱人伦丫前精品视频| 欧美一区二区三区喷汁尤物| 欧美综合久久久| 精品国产一二三四区| 免费久久久久久久久| 国产电影一区二区三区| 最好看的2019年中文视频| 成人av综合在线| 欧美亚洲国产日本| 国产在线日本| 免费日韩av片| 热国产热中文视频二区| 成人线上播放| 久久九九热re6这里有精品| 久久精品系列| 日日夜夜精品视频免费观看| 亚洲在线第一页| 香蕉视频911| 少妇视频一区| 丰满大乳奶做爰ⅹxx视频| 我要色综合中文字幕| 欧美激情图区| 中文字幕自拍vr一区二区三区| 欧美色图中文字幕| 日本一区二区在线免费播放| 亚洲成年网站在线观看| 亚洲天堂网视频| 在线视频免费在线观看一区二区| 大尺度在线观看| 欧美一区二区福利| 久久久人成影片一区二区三区观看| 日本a人精品| 91麻豆国产精品久久| 精品一区二区电影| 国产综合中文字幕| 正在播放国产对白害羞| av不卡中文字幕| 深夜福利网址| 97精品视频在线观看自产线路二| 国产视频在线一区二区| 亚洲视频在线视频| 欧美性做爰猛烈叫床潮| 熟妇人妻无乱码中文字幕真矢织江| 影视先锋午夜av| 福利欧美精品在线| 久久久久久精| 日韩欧美一区二区三区在线视频| 国产精品videossex久久发布| 黄色成人羞羞视频| 成人羞羞视频播放网站| 亚洲福利视频二区| 中文字幕免费国产精品| 国产在线中文字幕| 3d成人动漫网站| 欧美变态挠脚心| 香港日本三级视频| 久久99蜜桃精品| 亚洲 自拍 另类 欧美 丝袜| 亚洲黄页在线观看| 亚洲图片激情小说| 国产精品高潮久久| 日韩视频在线观看国产| 蜜桃传媒九九九| 最新中文字幕av专区| 亚洲怡红院在线观看| av在线免费播放网站| 欧美孕妇毛茸茸xxxx| 国产精品自拍在线观看| 精品视频无码一区二区三区| 国产日韩精品电影| 久久av免费| 中文字幕第24页| 久久久久久久久久久久久91| 女同互添互慰av毛片观看| videos性欧美另类高清| 国产区精品在线观看| 刘亦菲一区二区三区免费看| 三级三级久久三级久久18| 国产51人人成人人人人爽色哟哟| 丰满人妻一区二区三区四区| 亚洲影院中文字幕| 欧美国产一二三区| 色偷偷av一区二区三区| 97久久久精品综合88久久| 国产精品91在线观看| 在线免费电影观看| 黄色亚洲大片免费在线观看| 午夜男人天堂| 一区二区成人免费视频| 国产一区二区三区久久| 丁香六月综合| 亚洲精品国产一区二区精华液| 黄色亚洲免费| 香蕉人妻av久久久久天天| 免费看又色又爽又黄网站| 在线碰免费视频在线观看| 91精品国产色综合久久不8| 精品一区二区三区四| 国产精品美女免费看| av电影免费看| 亚洲美女炮图| 国产一区视频在线看| 国产精品入口日韩视频大尺度| 啦啦啦在线视频免费观看高清中文| 少妇视频在线播放| 极品人妻videosss人妻| 中文字幕人成高清视频| 久草网在线观看| 亚洲欧美日韩一区成人| 99久久99久久综合| 亚洲国产91精品在线观看| 中文在线а√天堂官网| 日本不卡视频在线| 男女视频免费网站| jizz久久精品永久免费| 国产精品美女久久久久av爽| 国产成人调教视频在线观看| 日本伊人午夜精品| 麻豆国产传媒av福利| 一区二区不卡在线视频 午夜欧美不卡在| 欧美视频一区在线观看| 国产经典欧美精品| av黄色免费网站| 一区二区视频免费完整版观看| eeuss一区| 日本精品久久久久影院| 欧美第一区第二区| 亚洲成人av片在线观看| 999久久久国产精品| 亚洲一区中文字幕| av在线天堂播放| 色777狠狠狠综合伊人| 91国产美女视频| 欧美韩国理论所午夜片917电影| 欧美日韩人妻精品一区二区三区| 欧美久久久影院| 你懂的国产精品永久在线| 日韩一区二区三区在线看| h在线视频免费观看完整版| a视频免费看| 热99这里只有精品| 国产精品久久久久毛片| 日韩av影院在线观看| 久久久亚洲精华液精华液精华液| 大桥未久一区二区| 国偷自产一区二区免费视频| 欧美极品aaaaabbbbb| 日本一区二区三区四区高清视频| 免费**毛片在线| 久热中文字幕在线精品首页| 国产精品久久久久久久成人午夜| 少妇一级淫免费放| 性做久久久久久久| 欧美黄色aaaa| 国产主播福利| 欧美日韩亚洲综合在线| 日韩av资源在线播放| 高清在线观看免费韩剧| 极品美女销魂一区二区三区免费| 亚洲第一se情网站| 久草视频免费在线观看| 国产精品97在线| 国产精品免费看久久久无码| 97精品在线| 亚洲精品婷婷| 免费黄漫在线观看| 涩涩网站在线观看| 玖玖在线播放| 国产麻豆一区二区三区在线观看| 国产一级在线视频| av蓝导航精品导航| 天天做天天爱天天综合网2021| 免费看男女www网站入口在线| 中文字幕三级电影| 欧美一区二区三区红桃小说| 超碰caoporn久久| 91精品国产自产在线观看永久∴| 久久久久99精品一区| 78精品国产综合久久香蕉| 在线观看国产成人av片| 欧美美女在线| 亚洲va欧美va人人爽成人影院| 久草香蕉在线| jizz大全欧美jizzcom| 网友自拍区视频精品| 免费在线观看av电影| 欧美日韩一区中文字幕| 最近日韩中文字幕| 欧美日韩一本到| 性感小视频在线看免费| 轻点好疼好大好爽视频| 国产免费av国片精品草莓男男| 国产精彩自拍| 少妇高潮惨叫久久久久| 96国产粉嫩美女| 美女网站色91| 中文字幕在线视频区| 亚洲一区二区成人在线观看| 中文字幕欧美亚洲| 亚洲国产精品一区二区久| 精品少妇人妻av免费久久洗澡| 日韩欧美中文| 成人一级生活片| 高清精品xnxxcom| 日韩欧美手机在线| xx00欧美| 天天操夜夜拍| 伊人久久综合影院| 狠狠躁夜夜躁人人爽超碰91| 香蕉久久国产av一区二区| 午夜欧美激情| 九九精品九九| 亚洲小说区图片区| 欧美视频中文一区二区三区在线观看| 中文日产幕无线码一区二区| 日本在线高清视频一区| 日本高清无吗v一区| 欧美另类69精品久久久久9999| 中文字幕精品一区二区三区在线| 精品国产乱子伦一区| 亚洲一级片在线看| 久久国产成人午夜av影院宅| 超碰在线免费看| 日本黄色大片视频| 91视频你懂的| 国产成a人亚洲精品| 久热re这里精品视频在线6| 成人va在线观看| 欧美丝袜丝nylons| 天海翼亚洲一区二区三区| 夜夜嗨av色综合久久久综合网| 视频一区二区在线播放| 大胆亚洲人体视频| 素人fc2av清纯18岁| 日本不卡在线播放| 男女爱爱视频网站| 人人插人人干| 青花影视在线观看免费高清| 久久久久久久久99精品大| 免费av在线网址| 一本大道久久a久久综合婷婷| 少妇在线看www| 久久中文娱乐网| 黄色三级高清在线播放| 成人拍拍拍在线观看| 蜜臀久久99精品久久久久宅男| 精品久久久久中文慕人妻| 国产一区二区三区无遮挡| 久久久久久久久久久久久久久久久久久久| 91亚洲精品久久久久久久久久久久| 大菠萝精品导航| 开心快乐六月丁香婷婷| 中文字幕在线观看第二页| 天天综合网入口| 日韩精品电影一区二区三区| 色综合男人天堂| 夜夜嗨av一区二区三区网站四季av| 777精品久无码人妻蜜桃| 国产三级国产精品国产国在线观看| 欧美性生交片4| 一区二区不卡视频在线观看| aaa在线播放视频| 二区三区四区高清视频在线观看| 亲爱的老师9免费观看全集电视剧| 久久久国产一区二区三区四区小说| 亚洲女同女同女同女同女同69| 丰满人妻一区二区三区四区53| 亚洲欧美手机在线| 伊人久久大香线蕉精品| 亚洲精品一区视频| 91九色丨porny丨极品女神| 欧美另类视频|