oracle資料庫 序列 sequence

2022-07-12 09:24:07 字數 3221 閱讀 6388

乙個問題:

在某張表中,存在乙個id列(整數),我們希望在新增記錄的時候,該列從1開始,自動的增長,怎麼處理?

解決方式:oracle是利用「序列」(sequence)來完成的。

序列(sequence)介紹

oracle中,是通過使用序列(sequence)來處理自動增長列。

(1)可以為表中的列自動產生值。

(2)由使用者建立資料庫物件,並可由多個使用者共享。

(3)一般用於主鍵或唯一列。

建立序列基本語法:

create sequence序列名稱

start with開始數字

increment by增長數字

minvalue最小值

maxvalue最大值

cycle

nocache

詳細說明:

start with 開始數字à從幾開始

increment by 增長à步長,每次增長幾個數

minvalue 最小值

maxvalue 最大值à可以不設定,不設定應寫為nomaxvalue,也就是無窮大

cycle  迴圈,也就是說當長增長到最大值後,再從最小值開始重新增長

nocache 不設快取

案例說明:

create sequence my_seq --建立序列名

start with 1            --從1開始

increment by 1          --每次增長1

maxvalue 999999999      --最大值 //nomaxvalue(不設定最大值)

minvalue 1              --最小值

cycle                   --迴圈 //nocycle(一直累加,不迴圈)

nocache                 --不使用快取

解釋:從1開始,每次增長1,最大值999999999,之後迴圈從1開始。

create sequence myseq

start with 0

increment by 1

minvalue 0

nomaxvalue

nocycle

nocache;

解釋:從0開始,每次增長1,最小值0,無窮大,不迴圈一直累加。

sequence的使用:

create table test1(id number primary key,name varchar2(32));

insert into test1 values(myseq.nextval,'abc');

insert into test1 values(myseq.nextval,'ddd');

特別說明:

1、myseq:表示序列的名字,nextval:關鍵字,表示從序列中取下乙個值。

2、sequence序列是需要配合number型別的列來使用;

3、sequence序列是要在主鍵或unique列上使用的。

問題:如果system使用者使用scott的sequence的序列時,sequence是從1增長還是從已使用到的數字開始?

答案:是從已使用到的數字接著增長。

細節說明:

看例子:

insert into emp values(my_seq.nextval,'tomcat','clerk',7566,sysdate,1200,null,20);

select my_seq.currval from dual;

注意:

第一次使用nextval返回的是初始值;

隨後的nextval會自動增加你定義的increment by值,然後返回增加後的值;

currval總是返回當前sequence的值,但是在第一次nextval初始化之後才能使用currval,否則會出錯。

使用一次nextval會增加一次sequence的值,所以如果你在同乙個語句裡面使用多個nextval,其值就是不一樣的。

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

一旦定義了某個序列,你就可以用currval,nextval

currval:返回sequence的當前值

nextval:增加sequence的值,然後返回sequence值。

比如:序列名.crrval

序列名.nextval

什麼時候使用sequence?

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

insert語句的子查詢中

insert語句的values中

update的set中

如:update 表名 列值=序列名.nextval where 條件;

在sqlserver和mysql中都可以在定義表的時候,直接給指定自增長。

sqlserver中設定自增長

create table 表名(id int primary key identity(1,1),name varchar(32));

mysql中設定自增長

create table 表名(id int primary key auto_incrment,name varchar(32));

Oracle資料庫之序列

序列是乙個計數器,它並不會與特定的表關聯。我們可以通過建立oracle序列和觸發器實現表的主鍵自增。序列的用途一般用來填充主鍵和計數。一 建立序列 語法結構 create sequence schema.sequence name integer 完整語法結構見 說明 schema 模式,即使用者名...

Oracle常見資料庫物件 序列

oracle常見資料庫物件 序列 一 序列 是oacle提供的用於產生一系列唯一數字的資料庫物件。a 序列的特點 i.自動提供唯一的數值 ii.共享物件 iii.主要用於提供主鍵值 iv.將序列值裝入記憶體可以提高訪問效率 b 序列的定義 create sequence sequence incre...

Oracle資料庫中序列用法講解

序列 sequence 是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值 型別為數字 其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下乙個值。建立序列需要create sequence系統許可權。序列的建立語法如下 quote creat...