oracle中如何設定主鍵並且讓其自動增長

2021-09-08 18:34:34 字數 2652 閱讀 6716

由於oracle中是沒有自動增長的的,需要自己去進行寫觸發器等方式去進行設定:

找了一下他人寫的,有兩種方法可以設定主鍵,一種是自增長主鍵,另一種就是生成唯一序列。

一、自增長主鍵

我建立乙個使用者的資訊表

-- create table

create tableuserinfo

(usernonumber not null,

username nvarchar2(20),

userpwd nvarchar2(20)

)tablespace myproduct

pctfree 10

initrans 1

maxtrans 255

storage

(initial 64k

next 1m

minextents 1

maxextents unlimited

);-- create/recreate primary, unique and foreign key constraints

alter table userinfo

add constraint userno primary key (userno)

using index

tablespace myproduct

pctfree 10

initrans 2

maxtrans 255

storage

(initial 64k

next 1m

minextents 1

maxextents unlimited

);其實上面你也可以用plsql進行圖介面設定,我就是這樣做的,為了學習,將其生成的sql**進行複製後貼在這裡。

主要是為了以後的學習,和供他人的參考。

下面是我的進行設定觸發器的sql語句:

create sequenceseq_userinfstart with 1 increment by 1

nomaxvalue

nominvalue

nocache;

create or replace triggertg_test

before insert onuserinfo

for each row when (new.usernois null)

begin

selectseq_userinf.nextval into:new.userno from dual;

end;

進行插入語句:

insert into userinfo(username,userpwd) values('d','d');

我表裡是有乙個資料,第一次插入的時候回出來錯誤的對話方塊,第二次就可以了

對上面進解釋:

- 再建乙個序列seq_userinf

create sequenceseq_userinf

minvalue 1        --最小值

nomaxvalue        --不設定最大值

start with 1      --從1開始計數

increment by 1    --每次加1個

nocycle           --一直累加,不迴圈

nocache;          --不建緩衝區

執行完後可以看一下結構:

第二種、唯一序列

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

序列生成器所生成的數字只能保證在單個例項裡是唯一的,這就不適合將它用作並行或者遠端環境裡的主關鍵字,因為各自環境裡的序列可能會生成相同的數字,從而導致衝突的發生。sys_guid會保證它建立的識別符號在每個資料庫裡都是唯一的。

此外,序列必須是dml陳述式的一部分,因此它需要乙個到資料庫的往返過程(否則它就不能保證其值是唯一的)。sys_guid源自不需要對資料庫進行訪問的時間戳和機器識別符號,這就節省了查詢的消耗。

很多應用程式都依靠序列生成器來建立資料行的主關鍵字,這些資料行沒有乙個明顯的主值,這也就是說,在這樣的資料集裡一條記錄的建立就會讓資料列發生改變。因此,管理員可能會對在**中將sys_guid用作主關鍵字而不使用序列數感興趣。這在物件在不同機器的不同資料庫裡生成以及需要在後來合併到一起的情況下很有用。

使用sys_guid或者序列會在資料庫使用週期裡的某些地方造成效能上的消耗;問題就是在**。對於sys_guid而言,效能上的影響在查詢時間和建立時間上(在**裡要建立更多的塊和索引以容納資料)。對序列而言,效能上的影響在查詢期間,在這個時候,sga序列的緩衝區被用光。在預設情況下,乙個序列一次會緩衝20個值。如果資料庫沒有使用這些值就關閉了,它們就會被丟失。

sys_guid生成的值的另乙個顯著的不足之處是,管理這些值會變得困難得多。你必須(手動)輸入它們或者通過指令碼來填充它們,或者將它們作為web引數來傳遞。出於這些原因,將sys_guid作為乙個主關鍵字不是乙個很好主意,除非是在乙個並行的環境裡或者希望避免使用管理序列生成器的情況下。

oracle中設定自增主鍵

新建序列 create sequence name increment by x x為增長間隔 start with x x為初始值 maxvalue x x為最大值 nomaxvalue 不設定最大值 minvalue x x為最小值 nominvalue 不設定最小值 cycle 迴圈使用,到達...

oracle中自增主鍵設定

mysql中主鍵自增設置為auto increment屬性,oracle中沒有該屬性,而是通過sequence序列,間接來實現主鍵自增功能 參考 序列 sequence 又叫序列生成器,用於提供一系列的數字,開發人員使用序列生成唯一鍵。每次訪問序列,序列按照一定的規律增加或者減少.序列建立引數說明 ...

oracle中設定自增主鍵簡化

create table example id number 4 not null primary key,name varchar 25 phone varchar 10 address varchar 50 create sequence emp sequence increment by 1 ...