oracle 自增列建立方法

2021-08-30 03:53:04 字數 2416 閱讀 1753

oracle沒有oracle自增字段這樣的功能,但是通過觸發器(trigger)和序列(sequence)可以實現。

先建乙個測試表了:

create table userlogin(

id   number(6) not null,

name   varchar2(30)   not null primary key )

tablespace users /

第一步:建立sequence

create  sequence  userlogin_seq  increment  by  1  start  with  1  minvalue  1  maxvalue 999999999  nocache  order;

第二步:建立乙個基於該錶的before insert 觸發器,在觸發器中使用剛建立的sequence

create or replace trigger userlogin_trigger

before insert on userlogin

for each row

begin

select   userlogin_seq.nextval   into:new.id  from sys.dual ;

end; /

第三步:在userlogin表中測試

寫個insert語句,插入一條記錄,看id欄位自增了沒,自增則ok啦。    

oracle序列知識:

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。

1、create sequence

你首先要有create sequence或者create any sequence許可權,

create sequence emp_sequence

increment by 1 -- 每次加幾個

start with 1 -- 從1開始計數

nomaxvalue -- 不設定最大值

nocycle -- 一直累加,不迴圈

cache 10;

一旦定義了emp_sequence,你就可以用currval,nextval

currval=返回 sequence的當前值

nextval=增加sequence的值,然後返回 sequence 值

比如:

emp_sequence.currval

emp_sequence.nextval

可以使用sequence的地方:

- 不包含子查詢、snapshot、view的 select 語句

- insert語句的子查詢中

- nsert語句的values中

- update 的 set中

可以看如下例子:

insert into emp values

(empseq.nextval, 'lewis', 'clerk',7902, sysdate, 1200, null, 20);

select empseq.currval from dual;

但是要注意的是:

- 第一次nextval返回的是初始值;隨後的nextval會自動增加你定義的increment by值,然後返回增加後的值。currval 總是返回當前sequence的值,但是在第一次nextval初始化之後才能使用currval,否則會出錯。一次nextval會增加一次sequence的值,所以如果你在同乙個語句裡面使用多個nextval,其值就是不一樣的。明白?

- 如果指定cache值,oracle就可以預先在記憶體裡面放置一些sequence,這樣訪問的快些。cache裡面的取完後,oracle自動再取一組到cache。 使用cache或許會跳號, 比如資料庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失. 所以可以在create sequence的時候用nocache防止這種情況。

2、alter sequence

你或者是該sequence的owner,或者有alter any sequence 許可權才能改動sequence. 可以alter除start至以外的所有sequence引數.如果想要改變start值,必須 drop sequence 再 re-create .

alter sequence 的例子

alter sequence emp_sequence

increment by 10

maxvalue 10000

cycle -- 到10000後從頭開始

nocache ;

影響sequence的初始化引數:

sequence_cache_entries =設定能同時被cache的sequence數目。

可以很簡單的drop sequence

drop sequence order_seq;

orcle建立自增列

剛剛用orcle,組長讓我設計一張表,結果設計完了以後就在plsql設計主鍵id,因為如果不用自增列的話就得用復合主鍵,所以就想著用id的自增列來表示。可是他和sql server又有點不太一樣,他沒又自增列。所以在網上查了一下,兩種方法。首先先建立一張測試表t demo create table ...

Oracle 實現自增列

sql server中實現自增列只需要將字段定義為identity 1,1 而在oracle中自增列需要使用乙個序列 sequence 和觸發器來實現。1.建立sequence,首先需要有create sequence或者create any sequence許可權 1 create sequenc...

mysql 自增列的建立

1.建表時就建立自增列 create table test id int auto increment primary key,name varchar 20 not null,password varchar 20 not null insert into test values null,aa ...