oracle不想sql server一樣有一個(gè)自增長(zhǎng)屬性可以設(shè)置。oracle如果需要自增長(zhǎng)需要使用序列。
創(chuàng)新互聯(lián)建站是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門(mén)戶平臺(tái)等全方位的服務(wù)。
主要的實(shí)現(xiàn)過(guò)程:
1、創(chuàng)建序列
--?Create?sequence?
create?sequence?SEQ_NAME
minvalue?1
maxvalue?9999999999
start?with?1
increment?by?1
cache?20
order;
其中SEQ_NAME是自定義的序列名稱,上面那個(gè)創(chuàng)建序列的意思是開(kāi)始序列號(hào)是1,序列增量是1,最小值是1,高速緩存大小是20
2、調(diào)用序列作為主鍵
select?seq_name.nextval?from?dual;---查詢seq_name序列的下一個(gè)數(shù)值
insert?into?tablename?(a,b)?value?(seq_name.nextval,'b');--獲取下一個(gè)序列值插入數(shù)據(jù)庫(kù)中
將表t_uaer的字段ID設(shè)置為自增:(用序列sequence的方法來(lái)實(shí)現(xiàn))----創(chuàng)建表Create table t_user(
Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6));----創(chuàng)建序列
create sequence user_seq
increment by 1
start with 1nomaxvaluenominvaluenocache----創(chuàng)建觸發(fā)器
create or replace trigger tr_user
before insert on t_popedom_user
for each rowbeginselect user_seq.nextval into :new.id from dual;end;----測(cè)試insert into t_popedom_user(userid,loginpassword, isdisable)
values('ffll','liudddyujj', 0);
insert into t_popedom_user(userid,loginpassword, isdisable)
values('dddd','zhang', 0)
select * from t_user;
就可以看出結(jié)果。
***********************************************************************
對(duì)sequence說(shuō)明:
increment by :用于指定序列增量(默認(rèn)值:1),如果指定的是正整數(shù),則序列號(hào)自動(dòng)遞增,如果指定的是負(fù)數(shù),則自動(dòng)遞減。
start with :用于指定序列生成器生成的第一個(gè)序列號(hào),當(dāng)序列號(hào)順序遞增時(shí)默認(rèn)值為序列號(hào)的最小值 當(dāng)序列號(hào)順序遞減時(shí)默認(rèn)值為序列號(hào)的最大值。
Maxvalue:用于指定序列生成器可以生成的組大序列號(hào)(必須大于或等于start with,并且必須大于minvalue),默認(rèn)為nomaxvalue。
Minvalue:用于指定序列生成器可以生成的最小序列號(hào)(必須小于或等于starr with,并且必須小于maxvalue),默認(rèn)值為nominvalue。
Cycle:用于指定在達(dá)到序列的最大值或最小值之后是否繼續(xù)生成序列號(hào),默認(rèn)為nocycle。
Cache:用于指定在內(nèi)存中可以預(yù)分配的序列號(hào)個(gè)數(shù)(默認(rèn)值:20)。
在sequence中應(yīng)注意:
1、 第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會(huì)自動(dòng)增加你定義的INCREMENT BY值,然后返回增加后的值。CURRVAL 總是返回當(dāng)前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否則會(huì)出錯(cuò)。一次NEXTVAL會(huì)增加一次SEQUENCE的值,所以如果你在同一個(gè)語(yǔ)句里面使用多個(gè)NEXTVAL,其值就是不一樣的。
2、 如果指定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防止這種情況。
關(guān)鍵字:自增 sequence序列 increment start with
首先,Oracle中沒(méi)有像MySQL那樣的id自增長(zhǎng)功能
如果要用Oracle這么做的話首先要先建一個(gè)表,如:
CREATE
TABLE
test(
ID
Number(4)
NOT
NULL
PRIMARY
KEY,
NAME
VARCHAR(25),
PHONE
VARCHAR(10),
ADDRESS
VARCHAR(50));
然后,你需要一個(gè)自定義的sequence:
CREATE
SEQUENCE
emp_sequence
INCREMENT
BY
1
--
每次加幾個(gè)
START
WITH
1
--
從1開(kāi)始計(jì)數(shù)
NOMAXVALUE
--
不設(shè)置最大值
NOCYCLE
--
一直累加,不循環(huán)
NOCACHE
--
不建緩沖區(qū)
你只有了表和序列還不夠,還需要一個(gè)觸發(fā)器來(lái)執(zhí)行它:
CREATE
TRIGGER
"觸發(fā)器名稱"
BEFORE
INSERT
ON
example
FOR
EACH
ROW
WHEN
(new.id
is
null)
begin
select
emp_sequence.nextval
into:
new.id
from
dual;
end;
這時(shí)你再向test表中插數(shù)據(jù)就可以不用管id了
oracle中沒(méi)有自動(dòng)增長(zhǎng),只有序列號(hào)\x0d\x0a添加一條記錄和sqlserver一樣\x0d\x0a語(yǔ)法:insert into table(列,列,列) values(value,value,value); \x0d\x0a\x0d\x0a如果有個(gè)自動(dòng)增長(zhǎng)列\(zhòng)x0d\x0a可以用這種方法,首先創(chuàng)建一個(gè)序列號(hào)SEQ_Test\x0d\x0a然后insert into table(ID,列,列) values(SEQ_Test.nextval,value,value);
-----oracle 指定字段 自增 ,1.要先創(chuàng)建一個(gè)序列 2. 之后創(chuàng)建一個(gè)觸發(fā)器
--- 序列 (序列與觸發(fā)器實(shí)現(xiàn)t_sys_organize表中F_ID字段的自動(dòng)增長(zhǎng))
create sequence t_sys_organize_F_ID_SEQUENCE
minvalue 100000
maxvalue 99999999
start with 100000
increment by 1
nocache;
--觸發(fā)器 (序列與觸發(fā)器實(shí)現(xiàn)t_sys_organize表中F_ID字段的自動(dòng)增長(zhǎng))
CREATE OR REPLACE TRIGGER t_sys_organize_F_ID_TRIGGER BEFORE INSERT ON t_sys_organize FOR EACH ROW WHEN(NEW.F_ID IS NULL)
BEGIN
SELECT t_sys_organize_F_ID_SEQUENCE.NEXTVAL INTO:NEW.F_ID FROM dual;
END;
oracle:
oracle沒(méi)有自增長(zhǎng)序列,因此可以用以下方法來(lái)實(shí)現(xiàn)
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立從1開(kāi)始的序列:
createsequenceemp_sequence
incrementby1--每次加幾個(gè)
startwith1--從1開(kāi)始計(jì)數(shù)
nomaxvalue--不設(shè)置最大值
nocycle--一直累加,不循環(huán)
nocache--不建緩沖區(qū)3.建立觸發(fā)器:
createorreplacetriggermytgr
beforeinsertontable1foreachrow
begin
selectmytgr.nextvalinto:new.cidfromdual;
end;
mysql:
createtabletbname(a_idunsignedintprimarykeyauto_incrementnotnull,
a_titlevarchar(32),
a_contenttext);