IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫Oracle → oracle主鍵的設(shè)置

oracle主鍵的設(shè)置

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(9)

  有兩種方法可以設(shè)置主鍵,一種是自增長主鍵,另一種就是生成唯一序列。

  一、自增長主鍵

  --首先建一個表TEST

  create table TEST

  (

  NID int PRIMARY KEY,

  test1 varchar2(20),

  test2 varchar2(20),

  test3 varchar2(20),

  test4 varchar2(20),

  test5 varchar2(20)

  )-- 再建一個序列SEQ_TEST

  create sequence SEQ_TEST

  minvalue 1? --最小值

  nomaxvalue? --不設(shè)置最大值

  start with 1????? --從1開始計數(shù)

  increment by 1??? --每次加1個

  nocycle???? --一直累加,不循環(huán)

  nocache;??? --不建緩沖區(qū)??? 以上代碼完成了一個序列(sequence)的建立過程,名稱為SEQ_TEST,范圍是從1開始到無限大(無限大的程度是由你機(jī)器決定的),nocycle 是決定不循環(huán),如果你設(shè)置了最大值那么你可以用cycle 會使seq到最大之后循環(huán).對于nocache順便說一下如果你給出了cache值那么系統(tǒng)將自動讀取你的cache值大小個seq,這樣在反復(fù)操作時會加快運(yùn)行速度,但如果遭遇意外情況如當(dāng)機(jī)了或oracle死了,則下次取出的seq值將和上次的不連貫.(如果連不連貫無所謂,建議用cache,因?yàn)闀r間就是金錢呀!)

  你只有了表和序列還不夠,最好再建一個觸發(fā)器來執(zhí)行它!代碼如下:

  CREATE OR REPLACE TRIGGER tg_test

  BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)

  begin

  select seq_test.nextval into:new.nid from dual;

  end;下面是測試

  select * from test

  insert into test(nid,test1) values(6,'aaa')

  insert into test(test1) values('bbb')

??? 二、唯一序列

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

  序列生成器所生成的數(shù)字只能保證在單個實(shí)例里是唯一的,這就不適合將它用作并行或者遠(yuǎn)程環(huán)境里的主關(guān)鍵字,因?yàn)楦髯原h(huán)境里的序列可能會生成相同的數(shù)字,從而導(dǎo)致沖突的發(fā)生。SYS_GUID會保證它創(chuàng)建的標(biāo)識符在每個數(shù)據(jù)庫里都是唯一的。

  此外,序列必須是DML陳述式的一部分,因此它需要一個到數(shù)據(jù)庫的往返過程(否則它就不能保證其值是唯一的)。SYS_GUID源自不需要對數(shù)據(jù)庫進(jìn)行訪問的時間戳和機(jī)器標(biāo)識符,這就節(jié)省了查詢的消耗。

  很多應(yīng)用程序都依靠序列生成器來創(chuàng)建數(shù)據(jù)行的主關(guān)鍵字,這些數(shù)據(jù)行沒有一個明顯的主值,這也就是說,在這樣的數(shù)據(jù)集里一條記錄的創(chuàng)建就會讓數(shù)據(jù)列發(fā)生改變。因此,管理員可能會對在表格中將SYS_GUID用作主關(guān)鍵字而不使用序列數(shù)感興趣。這在對象在不同機(jī)器的不同數(shù)據(jù)庫里生成以及需要在后來合并到一起的情況下很有用。

  使用SYS_GUID或者序列會在數(shù)據(jù)庫使用周期里的某些地方造成性能上的消耗;問題就是在哪里。對于SYS_GUID而言,性能上的影響在查詢時間和創(chuàng)建時間上(在表格里要創(chuàng)建更多的塊和索引以容納數(shù)據(jù))。對序列而言,性能上的影響在查詢期間,在這個時候,SGA序列的緩沖區(qū)被用光。在缺省情況下,一個序列一次會緩沖20個值。如果數(shù)據(jù)庫沒有使用這些值就關(guān)閉了,它們就會被丟失。

  SYS_GUID生成的值的另一個顯著的不足之處是,管理這些值會變得困難得多。你必須(手動)輸入它們或者通過腳本來填充它們,或者將它們作為Web參數(shù)來傳遞。出于這些原因,將SYS_GUID作為一個主關(guān)鍵字不是一個很好主意,除非是在一個并行的環(huán)境里或者希望避免使用管理序列生成器的情況下。

關(guān)鍵詞標(biāo)簽:oracle主鍵

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法