十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問題一站解決
這和序列的cache有關(guān),默認(rèn)cache為20,也就是每次拿出20個(gè)放到內(nèi)存中,當(dāng)實(shí)例崩潰或者內(nèi)存清洗后則會(huì)發(fā)生斷號(hào)的情況。如果你想解決這個(gè)問題,可以設(shè)置序列的cache為1
創(chuàng)新互聯(lián)公司主要業(yè)務(wù)有網(wǎng)站營(yíng)銷策劃、網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、微信平臺(tái)小程序開發(fā)、H5高端網(wǎng)站建設(shè)、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過(guò)程中,公司還積累了豐富的行業(yè)經(jīng)驗(yàn)、成都營(yíng)銷網(wǎng)站建設(shè)資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
--------------------------------
在oracle中sequence就是所謂的序列號(hào),每次取的時(shí)候它會(huì)自動(dòng)增加,一般用在需要按序列號(hào)排序的地方。
1、Create
Sequence
你首先要有CREATE
SEQUENCE或者CREATE
ANY
SEQUENCE權(quán)限,
CREATE
SEQUENCE
emp_sequence
INCREMENT
BY
1
--
每次加幾個(gè)
START
WITH
1
--
從1開始計(jì)數(shù)
NOMAXVALUE
--
不設(shè)置最大值
NOCYCLE
--
一直累加,不循環(huán)
CACHE
10;
一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回
sequence的當(dāng)前值
NEXTVAL=增加sequence的值,然后返回
sequence
值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
-
不包含子查詢、snapshot、VIEW的
SELECT
語(yǔ)句
-
INSERT語(yǔ)句的子查詢中
-
NSERT語(yǔ)句的VALUES中
-
UPDATE
的
SET中
可以看如下例子:
INSERT
INTO
emp
VALUES
(empseq.nextval,
'LEWIS',
'CLERK',7902,
SYSDATE,
1200,
NULL,
20);
SELECT
empseq.currval
FROM
DUAL;
但是要注意的是:
-
第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會(huì)自動(dòng)增加你定義的INCREMENT
BY值,然后返回增加后的值。CURRVAL
總是返回當(dāng)前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否則會(huì)出錯(cuò)。一次NEXTVAL會(huì)增加一次SEQUENCE的值,所以如果你在同一個(gè)語(yǔ)句里面使用多個(gè)NEXTVAL,其值就是不一樣的。明白?
-
如果指定CACHE值,ORACLE就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動(dòng)再取一組到cache。
使用cache或許會(huì)跳號(hào),
比如數(shù)據(jù)庫(kù)突然不正常down掉(shutdown
abort),cache中的sequence就會(huì)丟失.
所以可以在create
sequence的時(shí)候用nocache防止這種情況。
2、Alter
Sequence
你或者是該sequence的owner,或者有ALTER
ANY
SEQUENCE
權(quán)限才能改動(dòng)sequence.
可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須
drop
sequence
再
re-create
.
Alter
sequence
的例子
ALTER
SEQUENCE
emp_sequence
INCREMENT
BY
10
MAXVALUE
10000
CYCLE
--
到10000后從頭開始
NOCACHE
;
影響Sequence的初始化參數(shù):
SEQUENCE_CACHE_ENTRIES
=設(shè)置能同時(shí)被cache的sequence數(shù)目。
可以很簡(jiǎn)單的Drop
Sequence
DROP
SEQUENCE
order_seq;
如何使用Oracle序列:
Oracle序列(sequence)是一種數(shù)據(jù)庫(kù)項(xiàng),能夠生成一個(gè)整數(shù)序列。通常用于填充數(shù)字類型的主鍵列。
1、創(chuàng)建序列:
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num|NOMAXVALUE}]
[{MINVALUE minimum_num|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE cache_num|NOCACHE}]
[{ORDER|NOORDER}]
其中:
start_num:序列開始整數(shù)
increment_num:每次增加的整數(shù)增量
maximum:序列最大整數(shù)
minimum:序列最小整數(shù)
CYCLE:循環(huán)生成
NOCYCLE:不循環(huán)生成,默認(rèn)值
cache_num:保存在內(nèi)存中的整數(shù)的個(gè)數(shù)
NOCACHE:不緩存任何整數(shù)
例如:
CREATE SEQUENCE seq_test;(默認(rèn)值)
CREATE SEQUENCE seq_test START WITH 1 INCREMENT BY 2;
2、使用序列:
SELECT seq_test.nextval FROM dual;
insert into order_status2 (id) values (seq_test.nextval);
3、修改序列:
ALTER SEQUENCE語(yǔ)句來(lái)修改序列。可以修改的內(nèi)容:
不能修改序列的初值
序列的最小值不能大于當(dāng)前值
序列的最大值不能小于當(dāng)前值
例如:ALTER SEQUENCE seq_test INCREMENT BY 3;
4、刪除序列:
DROP SEQUENCE seq_test;
在oracle中sequence就是所謂的序列號(hào),每次取的時(shí)候它會(huì)自動(dòng)增加,一般用在需要按序列號(hào)排序的地方。
1、createsequence
你首先要有createsequence或者createanysequence權(quán)限,
createsequenceemp_sequence
incrementby1--每次加幾個(gè)
startwith1--從1開始計(jì)數(shù)
nomaxvalue--不設(shè)置最大值
nocycle--一直累加,不循環(huán)
cache10;
一旦定義了emp_sequence,你就可以用currval,nextval
currval=返回sequence的當(dāng)前值
nextval=增加sequence的值,然后返回sequence值
比如:
emp_sequence.currval
emp_sequence.nextval
可以使用sequence的地方:
-不包含子查詢、snapshot、view的select語(yǔ)句
-insert語(yǔ)句的子查詢中
-nsert語(yǔ)句的values中
-update的set中
可以看如下例子:
insertintoempvalues
(empseq.nextval,'lewis','clerk',7902,sysdate,1200,null,20);
selectempseq.currvalfromdual;
但是要注意的是:
-第一次nextval返回的是初始值;隨后的nextval會(huì)自動(dòng)增加你定義的incrementby值,然后返回增加后的值。currval總是返回當(dāng)前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會(huì)出錯(cuò)。一次nextval會(huì)增加一次sequence的值,所以如果你在同一個(gè)語(yǔ)句里面使用多個(gè)nextval,其值就是不一樣的。明白?
-如果指定cache值,oracle就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動(dòng)再取一組到cache。使用cache或許會(huì)跳號(hào),比如數(shù)據(jù)庫(kù)突然不正常down掉(shutdownabort),cache中的sequence就會(huì)丟失.所以可以在createsequence的時(shí)候用nocache防止這種情況。
2、altersequence
你或者是該sequence的owner,或者有alteranysequence權(quán)限才能改動(dòng)sequence.可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須dropsequence再re-create.
altersequence的例子
altersequenceemp_sequence
incrementby10
maxvalue10000
cycle--到10000后從頭開始
nocache;
影響sequence的初始化參數(shù):
sequence_cache_entries=設(shè)置能同時(shí)被cache的sequence數(shù)目。
可以很簡(jiǎn)單的dropsequence
dropsequenceorder_seq;
--創(chuàng)建序列的語(yǔ)法 --
CREATE SEQUENCE SEQ_POS_ORDER_ONLINE_ID
INCREMENT BY 1
START WITH 1000000000000042 -- 從1開始計(jì)數(shù) 或 MINVALUE 1 或 NOMINVALUE --的設(shè)置最小值 不設(shè)置最小值
NOMAXvalue -- 不設(shè)置最大值 或 MAXVALUE 10 --設(shè)置最大值 10
NOCYCLE -- 一直累加,不循環(huán) 或
CACHE 10; --設(shè)置緩存cache個(gè)序列,如果系統(tǒng)down掉了或者其它情況將會(huì)導(dǎo)致序列不連續(xù),也可以設(shè)置為---------NOCACHE