Oracle主鍵ID設定自動增長(序列 觸發器)

2021-08-27 06:11:57 字數 1656 閱讀 5506

----建立表

create table users

(user_id number(6) not null,

user_name varchar2(20) not null,

user_pwd varchar2(20) not null,

user_email varchar2(20),

user_intro varchar2(20),

primary key (user_id)

);----建立序列

create sequence users_seq

increment by 1

start with 1

nomaxvalue

nominvalue

nocache

----建立觸發器

create or replace trigger tr_user

before insert on users

for each row

begin

select users_seq.nextval into :new.user_id from dual;

end;

----插入資料

insert into users values

(users_seq.nextval,'admin','admin','[email protected]','undoner')

----查詢資訊

select * from users

----查詢序列

select users_seq.nextval from dual;

對sequence說明:

increment by :用於指定序列增量(預設值:1),如果指定的是正整數,則序列號自動遞增,如果指定的是負數,則自動遞減。

start with :用於指定序列生成器生成的第乙個序列號,當序列號順序遞增時預設值為序列號的最小值當序列號順序遞減時預設值為序列號的最大值。

maxvalue:用於指定序列生成器可以生成的組大序列號(必須大於或等於start with,並且必須大於minvalue),預設為nomaxvalue。

minvalue:用於指定序列生成器可以生成的最小序列號(必須小於或等於starr with,並且必須小於maxvalue),預設值為nominvalue。

cycle:用於指定在達到序列的最大值或最小值之後是否繼續生成序列號,預設為nocycle。

cache:用於指定在記憶體中可以預分配的序列號個數(預設值:20)。

在sequence中應注意:

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

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

oracle怎麼實現id自增和設定主鍵

這個問題,是從其他資料庫轉過來的開發者最常見的問題。1 關於主鍵 在建表時指定primary key字句即可 create table test id number 6 primary key,name varchar2 30 如果是對於已經建好的表,想增加主鍵約束,則類似語法 alter tabl...

oracle怎麼實現id自增和設定主鍵

1 關於主鍵 在建表時指定primary key字句即可 create table test id number 6 primary key,name varchar2 30 如果是對於已經建好的表,想增加主鍵約束,則類似語法 alter table test add constraint pk i...

設定Oracle主鍵自增

oracle沒有設定主鍵auto increment的功能,需要自己編寫序列和觸發器實現主鍵自動遞增。示例 建立表menu create table menu menuid number 10 not null primary key,name varchar2 40 not null,id par...