首先,Oracle中沒有像MySQL那樣的id自增長(zhǎng)功能
“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)公司的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對(duì)成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。
如果要用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開始計(jì)數(shù)
NOMAXVALUE
--
不設(shè)置最大值
NOCYCLE
--
一直累加,不循環(huán)
NOCACHE
--
不建緩沖區(qū)
你只有了表和序列還不夠,還需要一個(gè)觸發(fā)器來執(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 指定字段 自增 ,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沒有自增長(zhǎng)序列,因此可以用以下方法來實(shí)現(xiàn)
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立從1開始的序列:
createsequenceemp_sequence
incrementby1--每次加幾個(gè)
startwith1--從1開始計(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);
oracle中沒有自動(dòng)增長(zhǎng),只有序列號(hào)\x0d\x0a添加一條記錄和sqlserver一樣\x0d\x0a語法: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);
將表t_uaer的字段ID設(shè)置為自增:(用序列sequence的方法來實(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說明:
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è)語句里面使用多個(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
中不能設(shè)置自動(dòng)增加,這個(gè)和其他數(shù)據(jù)庫(kù)不一樣,但是有
序列,這個(gè)是Oracle自己特有的東西,
首先創(chuàng)建序列:
create
sequence
seq;
這就創(chuàng)建好了,然后
seq.nextval
就會(huì)返回一個(gè)值,不會(huì)重復(fù)的值,
insert
into
tablename
values(seq.nextval,'001','javabook');
insert
into
tablename
values(seq.nextval,'001','javabook');
insert
into
tablename
values(seq.nextval,'001','javabook');
看明白沒?這樣前3個(gè)id
分別是
1,2,3