日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle主键增长方式,oracle 自增长主键

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 自增长主键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。