如何查到別人的網(wǎng)站做哪些競價詞友情鏈接查詢友情鏈接檢測
目錄
序列的創(chuàng)建
序列的使
Oracle從入門到總裁:??????https://blog.csdn.net/weixin_67859959/article/details/135209645
在許多數(shù)據(jù)庫之中都會存在有一種數(shù)據(jù)類型 — 自動增長列,它能夠創(chuàng)建流水號。如果想在 Oracle 中實現(xiàn)這樣的自動增長列,可以使用序列的方式完成
序列的創(chuàng)建
create sequence 序列名稱
[MAXVALUE 最大值 | NOMAXVALUE]
[MINVALUE 最小值 | NOMINVALUE]
[INCREMENT BY 步長 ] [START WITH 開始值 ]
[CYCLE | NOCYCLE]
[CACHE 緩存?zhèn)€數(shù) | NOCACHE] ;
MAXVALUE :可選項,定義序列的最大值
MINVALUE :可選項,定義序列的最小值
START WITH 開始值:可選項,定義序列的開始值
INCREMENT BY 步長:可選項,定義序列每次增加值
CYCLE :可選項,表示當(dāng)序列增加到最大值或者減少到最小值的時候,重新從開始值繼續(xù)
CACHE :可選項,表示是否產(chǎn)生序列號預(yù)分配,并存儲在內(nèi)存中
序列屬于數(shù)據(jù)庫對象的創(chuàng)建過程,屬于 DDL 的分類范疇。對于序列而言,創(chuàng)建之后一定會在數(shù)據(jù)字典中保存
CREATE SEQUENCE myseq ;
?上面代碼創(chuàng)建一個序列,名字為 myseq,所有參數(shù)都取默認值
既然序列的對象信息會在數(shù)據(jù)字典中保存,那么現(xiàn)在就可以查詢序列的數(shù)據(jù)字典
SELECT * FROM user_sequences ;
SEQUENCE_NAME :序列名稱,本次為 MYSEQ
MIN_VALUE :當(dāng)前序列的最小值,本次為 1
MAX_VALUE :當(dāng)前序列的最大值,本次為“1.0000E+28”
INCREMENT_BY :每次序列增長的步長內(nèi)容
CY :是否為循環(huán)序列,本次為“N”
OR :是否需要排序
CACHE_SIZE :緩存?zhèn)€數(shù),默認為 20 個
LAST_NUMBER :最后的數(shù)值?,F(xiàn)在序列已經(jīng)創(chuàng)建成功了,如果要想使用序列則可以使用如下的兩個偽列完成
nextval :取得序列下一個內(nèi)容,每一次調(diào)用序列的值都會增長
currval :表示取得序列的當(dāng)前內(nèi)容,每一次調(diào)用序列不會增長,如果要想使用此偽列,那么在使用之前必須首先使用 nextval 取得內(nèi)容才可以。
只有運行了 nextval 之后才表示內(nèi)容真正可以使用?
序列的使
CREATE TABLE mytab(id NUMBER ,name VARCHAR2(50) ,CONSTRAINT pk_id PRIMARY KEY(id)
) ;
?此時的數(shù)據(jù)表與原始相比沒有任何區(qū)別,但是在數(shù)據(jù)增加的時候,由于 id 屬于一個主鍵列,所以可以利用序列來生成 id 的內(nèi)容
INSERT INTO mytab(id,name) VALUES (myseq.nextval,'HELLO') ;
以上的操作是序列在實際開發(fā)中使用最多的一種情況,但是從序列的創(chuàng)建語法來講,并不是這么簡單,所以下面需要對序列進行進一步的分析
那么首先需要來解決緩存的作用是什么
在序列的操作過程中,為了保證序列操作的性能問題,會利用緩存在用戶未使用到指定的序列值時自動將內(nèi)容創(chuàng)建好,這樣用戶在使用序列中就不是一起創(chuàng)建的了,從而達到性能的提升
但是緩存本身會存在一個丟號的問題,如果數(shù)據(jù)庫關(guān)閉了,那么序列的內(nèi)容就可能無法連續(xù)了,稱此為丟號問題
但是以上所創(chuàng)建的只是標準的序列,而實際上序列也可以創(chuàng)建一些特殊情況
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq
INCREMENT BY 2 ;
上面代碼中,“DROP SEQUENCE myseq ”表示刪除序列的代碼,然后創(chuàng)建一個新的序列,步長為 2
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq
INCREMENT BY 2
START WITH 100000 ;
上面代碼中,創(chuàng)建的序列開始值為 100000,增加的步長為 2。
在序列的使用過程中還可以創(chuàng)建一個循環(huán)序列,例如希望序列可以在 1、3、5、7、9 之間循環(huán)顯示,所以此時就需要設(shè)置序列的最大值 9、最小值 1,而且設(shè)置為循環(huán)
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq
INCREMENT BY 2 START WITH 1
MINVALUE 1 MAXVALUE 9
CYCLE NOCACHE;
從實際情況來說,序列的使用往往都不需要這么復(fù)雜,生成一個流水號就夠了