oracle的主鍵問題

2021-06-21 14:10:45 字數 1873 閱讀 7897

在oracle中主鍵建立通常有兩種方法,但也可以讓使用者進行自己進行定義生成主鍵的策略。:

自增主鍵序列和sys_guid生成唯一的序列。

下面分別進行介紹這兩種方法:

一:自增主鍵

建立乙個表

create table student(

stid int primary key,

name varchar2(20)

)

create sequence seq_student

minvalue 1 -- 最小值,可選 

nomaxvalue   --最大值 可選

start with 1  --從一開始計數 

increment by 1 --每次遞增數

nocycle --一直累加,不迴圈 可選

nocache ; --不見緩區 chache 10 可選

用的時候是

insert into student (stid,name) value (seq_student.nextval,'xiaxia');

引數的詳解:

increment by

用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表序列的值是按照此步長遞減的。

start with

定義序列的初始值(即產生的第乙個值),預設為1。

maxvalue 

定義序列生成器能產生的最大值。選項nomaxvalue是預設選項,代表沒有最大值定義,這時對於遞增序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。

minvalue

定義序列生成器能產生的最小值。選項nomaxvalue是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。

cycle和nocycle 

表示當序列生成器的值達到限制值後是否迴圈。cycle代表迴圈,nocycle代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。

cache

(緩衝)定義存放序列的記憶體塊的大小,預設為20。nocache表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。

刪除的話 

drop sequence 序列名。

使用序列

select * from 序列名.currval(或者序列名.nextval) from dual
select sys_guid() from dual;
資料型別是 raw(16) 有32個字元。

二:自增主鍵

sys_guid() 生成32位的唯一編碼。

區別:

1.使用uuid主要優點是分布式環境下,主鍵不會重複;缺點是效能相對較低。
2.序列則相反,他在分布式環境下會重複,但是效能較高。
所以如果沒有分布式環境的需求(例如層級資料上報),可以盡量採用序列作為主鍵

hibernate 中oracle主鍵問題

今天在開發中遇到了乙個問題,關於oracle主鍵生成機制,後來在查過多方資料後總結了點小經驗,若有不對的地方請多多關照。假如你的業務不需要跨資料庫的話oracle主鍵可以用sequence,但是假如你有很多的表都用到主鍵自增的話會發現你的sequence會很多也會出問題,而且不能跨資料庫這是比較明顯...

oracle刪除主鍵約束的問題m

1 alter table 表名 drop primary key 這個是把主鍵從表中去除,而不是真正的刪除主鍵 例子 建立表 create table test table students student id number not null,student name varchar 20 no...

oracle 主鍵刪除,聯合主鍵的建立

alter table tablename drop primary key 執行上面的sql能夠刪除主鍵 假設不成功能夠用 alter table tablename drop constraints column cascade 刪除約束 alter table tablename disabl...