7.1About Sequencess(關(guān)于序列)
序列是數(shù)據(jù)庫對象的一種。
多個用戶能夠通過序列來生成連續(xù)的數(shù)字以此來實現(xiàn)主鍵字段的“自己主動”和“唯一增長”。而且一個序列可為多列、多表同一時刻使用。
序列消除了串行化而且提高了應(yīng)用程序一致性。
7.2Creating Sequences(創(chuàng)建序列)
在system模式下創(chuàng)建序列需要擁有create sequence 權(quán)限。
在其他用戶模式下創(chuàng)建序列則需要create any sequence權(quán)限?!Z法為:Syntax 。
--假設(shè)不加條件語句,默認創(chuàng)建的序列格式例如下:
create sequence SEQ_T
minvalue 1
maxvalue 9999999999999
start with 1
increment by 1
cache;
語義Semantics:
INCREMENT BY :指定序列增長步長。
能夠為正、負整數(shù)分別對應(yīng)升序、降序。但不能為0——(序列不重復(fù))
最高精度28.
START WITH :指定序列起始數(shù)。
MAXVALUE:指定序列最大值。最大28位。必須大于等于起始值且大于等于序列最小值。
MINVALUE:指定序列最小值。
NOMAXVALUE:無最大值(實際為10^27或-1)。default
NOMINVALUE:無最小值(實際為-10^27或1)。default
CYCLE:指定序列達到最大值或最小值后繼續(xù)從頭開始生成。
NOCYCLE:指定不循環(huán)生成。default
CACHE:指定數(shù)據(jù)庫內(nèi)存中預(yù)分配的序列值的個數(shù),以便告訴獲取。最小cache值為2.
最大值為:(CEIL(MAXVALUE-MINVALUE))/ABS(INCREMENT)
注:假設(shè)系統(tǒng)發(fā)生問題。全部緩存的沒有被DML語句使用并提交的序列將會丟失。潛在丟失值數(shù)量等于cache指定的預(yù)先內(nèi)存分配序列值個數(shù)。
NOCACHE:不指定緩存數(shù),默認為20.
ORDER:指定order條件保證序列按請求順序生成。
此條件適用于RAC和環(huán)境。
NOORDER:不保證序列按請求順序生成。
CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE
--創(chuàng)建名為customers_seq的序列,起始值1000,步長為1,沒有緩存數(shù)量即內(nèi)存中預(yù)分配的序列值個數(shù)為20,不循環(huán)生成。
注:帶有cycle條件的序列當達到最大值時,下一個值會從最小值minvalue開始循環(huán)。
7.3 ALTER SEQUENCE(改動序列)
改動system模式的序列需要alter object權(quán)限。
改動其他模式序列需要alter any sequence權(quán)限。
1.假設(shè)想要以與現(xiàn)存不同數(shù)字又一次開始序列;則必須刪除重建。
alter sequence seq_t start with 2;
alter sequence seq_t start with 2 * ERROR at line 1:ORA-02283:cannot alter starting sequencenumber
2.改動的maxvalue必須大于序列當前值。
alter sequence seq_t maxvalue 1; --error
7.4DROP SEQUENCE(刪除序列)
刪除序列不許要有drop any sequence 權(quán)限。
DROP SEQUENCE oe.customers_seq;
7.5 NEXTVAL and CURRVAL :
nextval的值是每調(diào)用一次就增加一次;currval的值調(diào)用時,還是和自身會話的當前值一樣。