Oracle序列

1.什麼是序列【Sequence】
(1)類似於MySQL中的auto_increment自動增長機制,但Oracle中無auto_increment機制
(2)是oracle提供的一個產生唯一數值型值的機制
(3)通常用於表的主健值
(4)序列只能保證唯一,不能保證連續
聲明:oracle中,只有rownum永遠保持從1開始,且繼續
(5)序列值,可放於內存,取之較快

2.爲什麼oracle不直接用rownum做主健呢?
rownum=1這條記錄不能永遠唯一表示SMITH這個用戶
但主鍵=1確可以永遠唯一表示SMITH這個用戶

3.爲什麼要用序列
(1)以前我們爲主健設置值,需要人工設置值,容易出錯
(2)以前每張表的主健值,是獨立的,不能共享

4.例子:
(1)爲emp表的empno字段,創建序列emp_empno_seq,create sequence 序列名
create sequence emp_empno_seq;

(2)刪除序列emp_empno_seq,drop sequence 序列名
drop sequence emp_empno_seq;

(3)查詢emp_empno_seq序列的當前值currval和下一個值nextval,第一次使用序列時,必須選用:序列名.nextval
select emp_empno_seq.nextval from dual;
select emp_empno_seq.currval from dual;

(4)使用序列,向emp表插入記錄,empno字段使用序列值
insert into emp(empno) values(emp_empno_seq.nextval);
insert into emp(empno) values(emp_empno_seq.nextval);
insert into emp(empno) values(emp_empno_seq.nextval);

(5)修改emp_empno_seq序列的increment by屬性爲20,默認start with是1,alter sequence 序列名
alter sequence emp_empno_seq
increment by 20;

(6)修改修改emp_empno_seq序列的的increment by屬性爲5
alter sequence emp_empno_seq
increment by 5;

(7)修改emp_empno_seq序列的start with屬性,行嗎
alter sequence emp_empno_seq
start with 100;

(8)有了序列後,還能爲主健手工設置值嗎?
insert into emp(empno) values(9999);
insert into emp(empno) values(7900);

5.刪除表,會影響序列嗎?
你無法做insert操作

6.刪除序列,會影響表嗎?
表真正亡,序列亡

7.在hibernate中,如果是訪問oracle數據庫服務器,那麼User.hbm.xml映射文件中關於標籤如何配置呢?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章