1. 程式人生 > 其它 >oracles使用序列作為主鍵

oracles使用序列作為主鍵

在開發中由於之前的專案使用的是mysql資料庫,資料表的主鍵使用的是mysql自增策略生成,現在需要替換資料庫為oracle;但是orcle不支援主鍵自增策略,此次不得不尋求替代方案 --- oracle的序列

首先了解下序列是什麼

序列(SEQUENCE)是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。不佔用磁碟空間,佔用記憶體。

其主要用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下一個值。

序列的用法

建立序列:

1、 要有建立序列的許可權 create sequence 或 create any sequence

2、 建立序列的語法

  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;
————————————————
版權宣告:本文為CSDN博主「A點點圈圈A」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/sinat_38325967/article/details/90166053