Oracle 原理:序列
?序列是生成唯一的連續(xù)序號(hào)的對(duì)象。有點(diǎn)像SQLServer里面的種子標(biāo)識(shí),可以用來(lái)實(shí)現(xiàn)自增。
CREATE SEQUENCE S_NO --序列名 START WITH 1 --起始值 INCREMENT BY 1 --自增值 MAXVALUE 200 --最大值 MINVALUE 1 --最小值 NOCYCLE --超過(guò)最大值是否從頭算起 CACHE 10; --內(nèi)存中預(yù)先分配的序列號(hào)創(chuàng)建序列需要權(quán)限 CREATE SEQUENCE;
CACHE 10 :指的是預(yù)先分配的序列號(hào)。比如當(dāng)用戶要取序列 1 時(shí),1~10就會(huì)一起生成好,這樣下次取序列2時(shí),就不用先進(jìn)行計(jì)算了,直接取序列2就行。
CREATE SEQUENCE S_NO2 --序列名 START WITH 1 --起始值 INCREMENT BY 1 ; --自增值select * from user_sequences查看自身用戶創(chuàng)建的的序列信息可以用user_sequences ;? 查看所有用戶的序列信息可以用 dba_sequences
我們可以看見(jiàn),各個(gè)值的默認(rèn)值,當(dāng)沒(méi)有指明值的時(shí)候,MIN_VALUE默認(rèn)是1,MAX_VALUE是10^28,不進(jìn)行循環(huán),CACHE_SIZE為20;
使用SEQUENCE 時(shí), CURRVAL 獲取當(dāng)前序列;NEXTVAL 獲取下一個(gè)序列;首次使用SEQUENCE時(shí)要使用NEXTVAL對(duì)序列進(jìn)行初始化,否則會(huì)報(bào)錯(cuò)。
此時(shí)再查詢序列 s_no 信息:
發(fā)現(xiàn) LAST_NUMBER 變成了11,因?yàn)槟愕腃ACHE_SIZE設(shè)成了10
不斷獲取下一個(gè)序列,發(fā)現(xiàn)在此過(guò)程中,S_NO的LAST_NUMBER 一直是11.
當(dāng)獲取到11時(shí),LAST_NUMBER才變到21。
利用序列實(shí)現(xiàn)SQLServer里邊的種子字段的自增功能,只要insert into 的時(shí)候用 s_no.nextval 就行了;
例如,學(xué)號(hào)通常是由 入學(xué)年份和專業(yè)代碼還有班級(jí)座位號(hào)組成的,班級(jí)座位號(hào)的自動(dòng)生成就可以使用序列;
?
修改序列:除了START WITH 起始值不能修改,其他都可以被修改
ALTER SEQUENCE S_NO Maxvalue 1000 Cycle INCREMENT BY -6;可以用CREATE OR REPLECE 重建,或者設(shè)置 INCREMENT BY 為 負(fù)值,執(zhí)行以下NEXTVAL也行。
?
? ?if 序列沒(méi)被初始化
? ? ?LAST_NUMBER =? Nextval
? ?else?
? ???LAST_NUMBER =? 下一個(gè)進(jìn)行內(nèi)存分配的序列號(hào)
?
刪除序列:
DROP SEQUENCE [序列名]
總結(jié)
以上是生活随笔為你收集整理的Oracle 原理:序列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Oracle 原理: 公有同义词 和 私
- 下一篇: Oracle 原理: 视图,对视图进行增