Oracle學習筆記 10 序列

2021-08-20 08:00:50 字數 2627 閱讀 5407

當在開發中,我們查詢到一組資料,希望這組資料帶有一列自增的編號時。

在mysql資料庫中,字段可以設定一種型別,auto_increment(自增)。當乙個字段設定 auto_increment 型別後,給定乙個初始的數字,之後每加入一條新的記錄,該條記錄的這個欄位的值都會在原來的基礎上加1。這個屬性也經常和主鍵組合使用。

在sqlserver中,則擁有的是 identify 屬性,同樣實現自增的功能,其擁有兩個引數,即自增的最小值和最大值。 

而在oracle中,類似的功能我們就需要使用序列來完成。

create sequence mysequence     -- 建立序列名稱 

start with 1 -- 開始值

increment by 1 -- 增長值

minvalue 1 -- 最小值

maxvalue 100 -- 最大值

cycle -- 迴圈 cycle /不迴圈

nocycle nocache -- 快取 cache /不快取 nocache

-- 關於快取:舉例 cache 10 表示一次產生 10 個編號,提高計算效率,但不穩定。當一次產生10個號但並沒有使用完而意外中斷時,有可能會產生跳號現象。

sequence 和 table 等都屬於資料物件,都可以在plsql 的 object中直接查詢到。

序列一般情況下都是與主鍵或者其他具有唯一約束的列組合使用。

序列只能與number型別搭配使用,因為只有number型別才可以自增。

create table test1(userid number primary key , username varchar2(20));

insert into test1 values(mysequence.nextval,'nick');

insert into test1 values(mysequence.nextval,'john');

select * from test1;

正常情況下,這裡序列號應該為 1 和 2 。因為初始值是 1 ,第乙個nextval值是初始化值,第二個開始才按照規則自增。

但這裡出現 2 和 3 。原因如下:

oracle 11 版本之後,當oracle新錶使用序列作為 insert 值時,預設使用「延遲段」 功能。該功能是oracle 11 之後的版本才具有。可以使用如下語句進行關閉:

alter 使用者名稱 set deferred_segment_creation = false;
select mysequence.currval from dual;
檢視某個序列當前增長到多少。

★ 注意:

序列是資料庫物件,可以多個使用者共享使用, 呼叫方法與table的呼叫相同。

currval 功能 返回當前序列的值。但是,一定要在第一次 nextval 初始化之後才可以使用,否則會報錯。

第一次 nextval 返回的是初始值(需要注意的是在oracle11之後的版本中,直接插入序列時第乙個nextval返回的有可能不是初始值,具體原因上面紅字部分有解釋)。

索引最大的作用就是幫助使用者極大的提公升查詢、分組、排序的效率。但同時也會占用很大的記憶體空間。

單列索引

create index 索引名 on 表名(列名);
復合索引

create index 索引名 on 表名(列名1, 列名2);
create table test1(name varchar2(20), job varchar2(10), deptno number);

create index inx_name on test1(name);

★ 注意:               

剛剛說過,索引雖然能極大的提公升查詢的效率,但同時也占用很大的空間,降低資料增刪改的效率。

並且,索引也需要定期單獨的維護更新來保持和資料的一致性。

所以,不恰當的索引不但不會增加效率,反而會大幅度的降低系統的效能。

正確的建立索引對資料庫的效率而言是非常重要的。

索引建立的三大原則

1、資料量越大的表,建立索引越有意義;

2、索引盡量建立在經常使用 where 條件或連線條件 的列上;

3、索引建立的層次一般盡量不要超過 4 層;

邏輯性字段字段值很少很少引用的字段盡量避免建立索引,否則很可能得不償失。

Oracle學習筆記20150906序列

1.oracle中用sequence 序列 來實現自動增長列.序列由使用者建立資料庫物件,並可有多個使用者物件共享,一般用於主鍵或者唯一列.2.create sequence myseq序列名 start with 1從1開始遞增 increment by 1每次遞增1 maxvalue 99 no...

Python 學習筆記三 序列

sequence 序列 是一組有序的元素的集合,序列可以有任何元素,也可以沒有元素 元組與表的區別 一旦建立,tuple的各個元素不可再變更,而list的各個元素可以再變更 s1 1,2,zhansan 李四 false s2 1,2,zhansan lili true print s1,type ...

python筆記(1)序列

最近各種東西實在太忙了,但是忙裡偷閒還是要開一本書,老外寫的,雖然囉嗦但是很有啟發性的。1.記錄函式 如果想要給函式寫文件,從而讓後來者使用能夠更加理解,可以加入注釋,以 開頭 另外一種方式就是直接寫上字串,它們會作為函式的一部分進行儲存,這成為 文件字串 例如 def square x calcu...