您好,登錄后才能下訂單哦!
什么是序列【Sequence】
(1)類似于MySQL中的auto_increment自動增長機制,但Oracle中無auto_increment機制
(2)是oracle提供的一個產生唯一數值型值的機制
(3)通常用于表的主健值
(4)序列只能保證唯一,不能保證連續
聲明:oracle中,只有rownum永遠保持從1開始,且繼續
(5)序列值,可放于內存,取之較快
題問:為什么oracle不直接用rownum做主健呢?
rownum=1這條記錄不能永遠唯一表示SMITH這個用戶
但主鍵=1確可以永遠唯一表示SMITH這個用戶
主鍵的目的就是為了唯一地標識一條記錄,而rownum無法實現唯一標識某一條記錄。 |
為什么要用序列
(1)以前我們為主健設置值,需要人工設置值,容易出錯
(2)以前每張表的主健值,是獨立的,不能共享
為emp表的empno字段,創建序列emp_empno_seq,
create sequence 序列名
create sequence emp_empno_seq;
刪除序列emp_empno_seq,drop sequence 序列名
drop sequence emp_empno_seq;
查詢emp_empno_seq序列的當前值currval和下一個值nextval,第一次使用序列時,必須選用:序列名.nextval
select emp_empno_seq.nextval from dual; select emp_empno_seq.currval from dual;
使用序列,向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);
修改emp_empno_seq序列的increment by屬性為20,默認start with是1,alter sequence 序列名
alter sequence emp_empno_seq increment by 20;
修改修改emp_empno_seq序列的的increment by屬性為5
alter sequence emp_empno_seq increment by 5;
修改emp_empno_seq序列的start with屬性,行嗎
alter sequence emp_empno_seq start with 100;
不行,會報錯
但是可以在創建序列的時候 ,指定起始值和增長值
有了序列后,還能為主健手工設置值嗎?
insert into emp(empno) values(9999); insert into emp(empno) values(7900);
可以
(講課內容) 刪除表,會影響序列嗎? 你無法做insert操作 刪除序列,會影響表嗎? 表真正亡,序列亡 |
【存疑:我做了試驗,徹底刪除emp表之后,還能繼續使用emp_empno_seq的nextval和currval】 |
在hibernate中,如果是訪問oracle數據庫服務器,那么User.hbm.xml映射文件中關于<id>標簽如何配置呢?
<id name="id" column="id"> <generator class="increment/identity/uuid/【sequence】/【native】"/> </id>
(1)是否需要底層數據庫支持
identity需要底層數據庫支持auto_increment。在MySQL數據庫中,需要設置表的主鍵字段為自增長。
而increment和uuid不需要底層數據庫支持、不需要設置主鍵字段為自增長。
(2)是否支持多線程并發操作?
increment只能單線程訪問,多線程不行。
identity和uuid都支持并發操作。
(3)適用場景
如果只使用(專用)oracle數據庫,可以使用sequence,Hibernate會自動在Oracle數據庫中創建一個序列。
如果不確定使用oracle、mysql、sqlserver,可以使用native,它是一個通用的變量。一般都會使用native。
Hibernate幫助文檔 Various additional generatorsAll generators implement the interface
|
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。