oracle主键增长方式,oracle 自增长主键
oracle自增長主鍵
首先,你要有一張表!CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50));如果對于以上的建表語句還有疑問的話,建議您不要繼續了!有那么些時間您還不如去看看金庸讀讀瓊瑤!然后,你需要一個自定義的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 --每次加幾個START WITH 1 --從1開始計數NOMAXVALUE --不設置最大值NOCYCLE --一直累加,不循環NOCACHE --不建緩沖區以上代碼完成了一個序列(sequence)的建立過程,名稱為emp_sequence,范圍是從1開始到無限大(無限大的程度是由你機器決定的),nocycle是決定不循環,如果你設置了最大值那么你可以用cycle會使seq到最大之后循環.對于nocache順便說一下如果你給出了cache值那么系統將自動讀取你的cache值大小個seq
,這樣在反復操作時會加快運行速度,但如果遭遇意外情況如當機了或oracle死了,則下次取出的seq值將和上次的不連貫.(如果連不連貫無所謂建議用cache,因為時間就是金錢呀!跑題了!)書接上文,你只有了表和序列還不夠,還需要一個觸發器來執行它!代碼如下:CREATE TRIGGER "觸發器名稱" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;打完收工!下面你就試試插入數據吧!INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');
=============================================================
ORACLE SEQUENCE的簡單介紹(自增長字段)- -
from:http://ub1010.51.net/BBS/user_file/2002-04-10/1018438701.htm在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1、CreateSequence你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE權限,CREATESEQUENCEemp_sequence
INCREMENTBY1--每次加幾個STARTWITH1--從1開始計數NOMAXVALUE--不設置最大值NOCYCLE--一直累加,不循環CACHE10;
一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回sequence的當前值NEXTVAL=增加sequence的值,然后返回sequence值比如:emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:-不包含子查詢、snapshot、VIEW的SELECT語句-INSERT語句的子查詢中-NSERT語句的VALUES中-UPDATE的SET中
可以看如下例子:INSERTINTOempVALUES
(empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);
SELECTempseq.currvalFROMDUAL;
但是要注意的是:-第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會自動增加你定義的INCREMENTBY值,然后返回增加后的值。CURRVAL總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在同一個語句里面使用多個NEXTVAL,其值就是不一樣的。明白?
-如果指定CACHE值,ORACLE就可以預先在內存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。使用cache或許會跳號,比如數據庫突然不正常down掉(shutdownabort),cache中的sequence就會丟失.所以可以在createsequence的時候用nocache防止這種情況。
2、AlterSequence你或者是該sequence的owner,或者有ALTERANYSEQUENCE權限才能改動sequence.可以alter除start至以外的所有sequence參數.如果想要改變start值,必須dropsequence再re-create.
Altersequence的例子ALTERSEQUENCEemp_sequence
INCREMENTBY10
MAXVALUE10000
CYCLE--到10000后從頭開始NOCACHE;
影響Sequence的初始化參數:SEQUENCE_CACHE_ENTRIES=設置能同時被cache的sequence數目。
可以很簡單的DropSequence
DROPSEQUENCEorder_seq;
好吧,就到這里。-------------------------------------------------------------自增長及觸發器:
如何在Oracle中實現類似自動增加ID的功能?整理編輯:ChinaASP
我們經常在設計數據庫的時候用一個系統自動分配的ID來作為我們的主鍵,但是在ORACLE中沒有這樣的
功能,我們可以通過采取以下的功能實現自動增加ID的功能1.首先創建sequence
createsequenceseqmaxincrementby1
2.使用方法selectseqmax.nextvalIDfromdual就得到了一個ID如果把這個語句放在觸發器中,就可以實現和mssql的自動增加ID相同的功能!
-------------------------------------------------------------------------
###建表###
CREATETABLE"SPORTS"."LINEUP"("ID"NUMBERNOTNULL,"TYPE"
NUMBER(3)NOTNULL,"BODY"VARCHAR2(100)NOTNULL,"HITS"NUMBER(
10)DEFAULT0NOTNULL,PRIMARYKEY("ID"))
TABLESPACE"TS_SPORTS"
###建序列###
CREATESEQUENCE"SPORTS"."SPORTS_LINEUP_ID_SEQ"INCREMENTBY1
STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLE
CACHE50NOORDER
###建自動更新的觸發器###
CREATEORREPLACETRIGGER"SPORTS"."SPORTS_LINEUP_ID_TRIGGER"
BEFOREINSERT
ON"SPORTS"."LINEUP"
FOREACHROW
DECLARE
next_idNUMBER;
BEGIN
--Getthenextidnumberfromthesequence
SELECTsports_lineup_id_seq.NEXTVAL
INTOnext_id
FROMdual;
--Usethesequencenumberastheprimarykey
--fortherecordbeinginserted.
:new.id:=next_id;
END;
###建保護PRIMARYKEY的觸發器###
CREATEORREPLACETRIGGER"SPORTS"."LINEUP_ID_UPDATE_TRIGGER"
BEFOREUPDATEOF"ID"ON"SPORTS"."LINEUP"
FOREACHROW
BEGIN
RAISE_APPLICATION_ERROR(-20000,
'sports_lineup_id_update_trigger:UpdatesoftheIDfield'||'arenotallowed.');
END;
總結
以上是生活随笔為你收集整理的oracle主键增长方式,oracle 自增长主键的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle集群 节点切换不,Oracl
- 下一篇: oracle中primary,oracl