Oracle之Sequence(序列)
(一)序列概念
序列: 是oacle提供的用於產生一系列唯一數字的資料庫物件。
l 自動提供唯一的數值
l 共享物件
l 主要用於提供主鍵值
l 將序列值裝入記憶體可以提高訪問效率
(二序列用法)
建立序列:
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}];//分配並存入到記憶體中
3、序列的屬性
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 步長
Start 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;
在使用序列插入資料時,序列總是從2開始的原因:oracle從11.2.0.1版本開始,提供了一個延遲段建立特性
即:當我們建立了新的表和序列,在插入資料時,序列會跳過第一個值。因此,插入資料序列從2開始,而不是從1開始。
解決方法:
第一種方法:將資料庫的“延遲段建立”特性設為false(需要相應許可權才可以)
alter system set deferred_segment_creation=false;
第二種方法:在建表時讓segment立即執行
create table stu(id int , name varchar2(10)) segment creation immediate;
(四)裂縫問題
/使用序列
會產生裂縫
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;
相關文章
- PostgreSQL 序列(Sequence)SQL
- python sequence序列Python
- 裁剪序列Cut the Sequence
- ORACLE SEQUENCE用法Oracle
- [題解]P4597 序列 sequence
- oracle的scn及sequenceOracle
- [20220321]探究oracle sequence.txtOracle
- 不同於Oracle:SEQUENCE的區別Oracle
- [20220322]探究oracle sequence 2.txtOracle
- 「crudapi」零程式碼實現訂單序列號SequenceAPI
- Oracle中Nextval用法SEQUENCE與SYS_GUID()OracleGUI
- Oracle OCP(23):序列Oracle
- 0705_oracle 序列Oracle
- sequence to sequence模型模型
- [20190530]ORACLE 18c - ALTER SEQUENCE RESTART.txtOracleREST
- 在Hibernate中關於Oracle sequence的使用KHOracle
- bzoj1345: [Baltic2007]序列問題Sequence(單調棧)
- Oracle 建立序列語句Oracle
- 吳恩達《序列模型》課程筆記(3)– Sequence models & Attention mechanism吳恩達模型筆記
- 讀論文-序列感知推薦系統(Sequence-Aware Recommender Systems)
- 詳解數倉物件設計中序列SEQUENCE原理與應用物件
- Oracle RAC序列效能測試Oracle
- oracle 序列的建立與使用Oracle
- 自增長列和序列的區別(identity與sequence的區別)IDE
- oracle主鍵序列的建立,刪除,修改序列起始值Oracle
- Complete the Sequence (生成完整序列數)第一次做英文c++的題C++
- Sequence recognition
- 解決Oracle序列跳號問題Oracle
- uvm的sequence
- Rainbow Bracket SequenceAIRacket
- Increasing Sequence with Fixed OR
- PostgreSQL sequence (一)SQL
- 通用mapper用oracle序列作為主鍵APPOracle
- 簡單介紹oracle重置序列的方法Oracle
- 《每日一題》842. Split Array into Fibonacci Sequence 將陣列拆分成斐波那契序列每日一題陣列
- 論文閱讀:Sequence to sequence learning for joint extraction of entities and relations
- DRF之序列化元件元件
- FSM:Sequence 1101 recognizer
- F - Two Sequence Queries