Oracle 中select XX_id_seq.nextval from dual 什么意思呢?


說明

今天看別人的代碼 ,遇見了 一條sql    select ctg_fault_list_id_seq.nextval from dual  不懂意思,然后就研究了下

  dual :是oracle 數據庫中的虛擬表,並不是真實存在的

  XX_id_seq:這個是我們創建序列時自定義的一個序列名稱

  ctg_fault_list_id_seq.nextval:這個是取出序列的下一個值,序列可以用戶id生成器,每次我們都通過序列取到不同的值,並且不會重復

序列基本用法

序列: 是oacle提供的用於產生一系列唯一數字的數據庫對象。

  (1)自動提供唯一的數值

  (2)共享對象

  (3)主要用於提供主鍵值

  (4)將序列值裝入內存可以提高訪問效率

創建序列

要有創建序列的權限

create sequence 或 create any sequence

創建序列的語法

  CREATE SEQUENCE sequence  //創建序列名稱

       [INCREMENT BY n]  //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1

       [START WITH n]    //開始的值,遞增默認是minvalue 遞減是maxvalue

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循環/不循環

       [{CACHE n | NOCACHE}];//分配並存入到內存中

 

  NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用

  CURRVAL 中存放序列的當前值

  NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效

示例

Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1

Cycle cache 2;

//先nextval 后 currval

Select seqEmp.nextval  from dual; 

Select seqEmp.currval  from dual;

Cache<max-min/increment

解釋

{

Create 創建

Sequence 序列 seqEmop 序列名稱

Increment by 步長

Stat with 1 開始值

Maxvalue  最大值

Minvalue  最小值

 

Cycle 循環 nocycle 不循環

Cache 緩存   Cache<maxvalue-minvalue/increment by//一般不采用緩存

Nextvalue 下一個

Currval 當前值

 

}

實例應用

實現id的自動遞增

create table cdpt(

id number(6),

name varchar2(30),

constraint pk_id primary key(id)

);

 

Create sequence seq_cdpt

Increment by 1

Start with 1

Maxvalue 999999

Minvalue 1

Nocycle

nocache

 

insert into cdpt values(seq_cdpt.nextval,’feffefe’);

commit;

select * from cdpt;

使用序列

會產生裂縫

l   序列在下列情況下出現裂縫:

•  回滾

•  系統異常

多個表同時使用同一序列

//修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入內存

alter SEQUENCE sequence  //創建序列名稱

       [INCREMENT BY n]  //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1

       [START WITH n]    //開始的值,遞增默認是minvalue 遞減是maxvalue

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循環/不循環

       [{CACHE n | NOCACHE}];//分配並存入到內存中

修改序列的注意事項

l   必須是序列的擁有者或對序列有 ALTER 權限

l   只有將來的序列值會被改變

l   改變序列的初始值只能通過刪除序列之后重建序列的方法實現

刪除序列

l   使用DROP SEQUENCE 語句刪除序列

l   刪除之后,序列不能再次被引用

Alter sequence seqEmp maxvalue 5;

Select seqEmp.nextval from dual;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM