話說序列很少人知道,因為MySQL和sql server都有自動增長字段(如ID主鍵自動增長的整數(shù)),而Oracle卻沒有提供該用法,那么Oracle提供了更加靈活方便的策略-建立對象序列。
成都創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都網(wǎng)站設(shè)計、做網(wǎng)站和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶近千家,服務(wù)滿意度達97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注品牌網(wǎng)站制作和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!
序列創(chuàng)建之后也是真真實實存在的,存在我們的磁盤上,并可以適用場合調(diào)用,序列總是從指定的長度開始,創(chuàng)建了之后可以按照指定步長進行累加,獲得新的整數(shù)
格式:
create sequence emp_seq
解釋:
創(chuàng)建一個序列,經(jīng)常會用后綴seq來識別的
格式:
select object_name,object_type,status from user_objects where lower(object_name)='emp_seq';
解釋:
竟然是正兒八經(jīng)存在的對象,那么我們就可以通過數(shù)據(jù)庫user_objects.
格式:
select sequence_name,min_value,max_value,increment_by from user_sequences where lower(sequence_name)='emp_seq';
解釋:
用來查看我們創(chuàng)建的序列詳細信息的,我們通過這個突然發(fā)現(xiàn),還能看最大值,最小值,每次增長的步長.
使用序列
創(chuàng)建不用等于白創(chuàng),那么使用前先要理解兩個值,第一個currval,第二個nextval,從英語意思來看也很清晰,currval獲取當(dāng)前值,nextval獲取下一個值,每次調(diào)用nextval都會使當(dāng)前的序列增加單位步長(默認是1)
調(diào)用序列這兩個屬性方法為seq.currval和seq.nextval,第一次使用序列,注意哈,要先調(diào)用next的屬性,否則會報錯的!
格式:
select emp_seq.nextval from dual;
解釋:
我們用虛表dual來作為seq.nextval的from源,單行輸出顯示,這時候結(jié)果會是1.
因為nextval的值是默認整張的,所以我們要保證表ID為主鍵
格式:
alter table student_name modify(id number primary key);
格式:
insert into student(id,name) values(emp_seq,'你好',);
解釋:
假如student表中已有數(shù)據(jù),我們插入id時候直接調(diào)用創(chuàng)建的序列你會驚奇的發(fā)現(xiàn),失敗?。?!怎么回事,我們用select emp_seq.currval from dual;--發(fā)現(xiàn)數(shù)據(jù)是2,表中已經(jīng)有2了當(dāng)然不行了,怎么辦也不可能把原有的數(shù)據(jù)(這一列刪除掉),數(shù)據(jù)量小還可以用用,麻煩不說,顯示不出序列的威力!下面我們介紹怎么設(shè)置初始值,加入本表id值已經(jīng)1000條數(shù)據(jù),我們讓他從1000開始默認自增不是更好更高效!
格式:
drop sequence emp_seq;--刪除原來的序列
create sequence emp_seq start with 1001;
解釋:
關(guān)鍵詞start with 英語單詞理解就是起始,那么意思就是說這個序列從1001開始自動增加(默認是1),插入的時候起始值是1001這樣就可以根據(jù)我們的需求來使用序列,是不是很方便簡單高效。
格式:
alter sequence emp_seq minvalue 8888;--修改最小值,注意當(dāng)前修改的最小值不能大于原表中的數(shù)值(1001)?。?/p>
alter sequence emp_seq maxvalue 9999;--修改最大只
格式:
alter sequence emp_seq increment by 5;
解釋:
這就是我們前面一直給大家提到的默認增長的步調(diào),就是說每一次插入id值默認自動增長多少。
這個地方要注意設(shè)置最大值的問題,如果我最大值是20的話,從1開始每次增加5,最大只能到17,第四次就會超出最大值報錯,這個的話大家一下就會明白。
那么當(dāng)我超出最大值就不可以,超出最大值就讓他變成最小值,重新循環(huán),可以的,我們是操控者,只要我們愿意,他就得可以,下面介紹一個關(guān)鍵字來替我們?nèi)?zhí)行這個操作。
格式:
create sequence emp_seq
start with 5
minvalue 1
maxvalue 30
incremenet by 1
/--創(chuàng)建結(jié)束
這時候我們算是吧前面學(xué)的參數(shù)都用上了,看一看其實也很簡單啊,么點難度,我們開始多次nextval屬性值,直到用currval看當(dāng)前值最大值為30,當(dāng)我們在使用nextval的時候就會神奇的發(fā)現(xiàn)變成了1.
格式:
alter sequence emp_seq cycle;--開啟
alter sequence emp_sql nocycle;--關(guān)閉
緩存,什么是緩存,緩存是更好的讀數(shù)據(jù),速度比內(nèi)存都要快很多,那么序列也有緩存,大量數(shù)據(jù)能有緩存效果對于數(shù)據(jù)庫整體來說無疑是一個性能極大的提升。
那么序列的cache,每次利用nextval,并非直接操作,而一次性獲取多個列表的緩存,從緩存中抓取數(shù)值,而且依賴于currval和步長increment.
定義存放序列的內(nèi)存塊的大小,預(yù)先生成序列號,存放在內(nèi)存塊當(dāng)中,用下一個序號給予快速的相應(yīng),可以更快的響應(yīng),當(dāng)一組用完之后會再生成一組,這樣可以提高生成序列號的效率,默認值20。
格式:
alter sequence emp_seq cache 10;
解釋:
設(shè)置緩存區(qū)大小
昨天在工作中,在表中添加了一個序列id,當(dāng)時數(shù)據(jù)量比較小,利用表格然后插入到數(shù)據(jù)表列,如果數(shù)據(jù)量這個方法不可行而且特別麻煩,那么今天學(xué)習(xí)的序列就派上了大用場!
小序列并不簡單,能用好、用到正地方確實要很大學(xué)問,希望大家一起學(xué)以致用多多實戰(zhàn)。
網(wǎng)站名稱:Oracle中的小序列
本文鏈接:http://jinyejixie.com/article44/gdpshe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、ChatGPT、微信公眾號、、網(wǎng)站策劃、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)