我們?cè)谑褂胢ysql懦傍,sql_server等數(shù)據(jù)庫(kù)時(shí)可以在定義的字段名后面加上increment或autoincrement等標(biāo)識(shí)符自動(dòng)實(shí)現(xiàn)序列的增長(zhǎng)负蠕。比如在mysql中
create talbe person (
? ? P_ID int NOT NULL auto_increment,
? ?P_NAME VARCHAR(200)
)
默認(rèn)地,設(shè)置了auto_increment的字段從1開(kāi)始荔棉,每次增加1
但是在oracle中設(shè)置自動(dòng)增長(zhǎng)序列稍微要麻煩一點(diǎn)蔫劣,需要以下步驟:
1、首先創(chuàng)建表赊颠,還是以上面創(chuàng)建的表為例
2格二、創(chuàng)建一個(gè)序列,從100開(kāi)始竣蹦,每次增加1
create sequence?PERSON_ID? --PERSON_ID為這個(gè)序列的名稱(chēng)
minvalue 1
maxvalue 9999999999999999999999999999
start with 100 --從100開(kāi)始生成序列
increment by 1 --增量為1
cache 20; --預(yù)存20個(gè)序列值在內(nèi)存中,這樣可以提高訪問(wèn)序列的速度
3顶猜、為Person表創(chuàng)建一個(gè)before?insert的觸發(fā)器,在每次插入數(shù)據(jù)前該觸發(fā)器自動(dòng)為ID設(shè)置上面的序列值
CREATE OR REPLACE TRIGGER "PERSON_ID_GENERATOR"? BEFORE
INSERT ON "PERSON" FOR EACH ROW --一定要加上For each row,表示該觸發(fā)器適應(yīng)于每一條記錄
declare????????
????mid number;???
begin????????
????select order_id.nextval into mid from dual; --order_id.nextval是獲得上面定義的序列ORDER_ID的下一個(gè)值?????
????:new.p_id:=mid; --將得到的序列值賦給表order的主鍵id, 可以用":new"引用將要插入的一行數(shù)據(jù)end;
4痘括、這樣下次在向person表中插入數(shù)據(jù)時(shí)长窄,直接調(diào)用insert?into?PERSON(p_name)?values ('張三')
不用顯示在sql語(yǔ)句中插入P_ID,oracle會(huì)自動(dòng)調(diào)用上面的觸發(fā)器為P_ID賦值纲菌。