[資料庫] Navicat for Oracle設定唯一性和遞增序列實驗

來源:互聯網
上載者:User

標籤:

這篇文章主要講述Navicat for Oracle設定唯一性限制式和設定某欄位為遞增序列。文章主要以圖文為主,雖然都是非常簡單基礎的文章,但還是希望對你有所協助。
推薦前一篇文章:[資料庫] Navicat for Oracle基本用法圖文介紹

一. 設定唯一性

參考文章:Oracle之唯一性限制式(UNIQUE Constraint)用法詳解
唯一性限制式英文是Unique Constraint,它是指表中一個欄位或者多個欄位聯合起來能夠唯一標識一條記錄的約束。聯合欄位中,可以包含空值。

那唯一性限制式與主鍵又有什麼區別呢?
你可能會疑惑主鍵(Primary Key)不是唯一標識一張表的嗎?
主鍵是所有組成主鍵的列都不能包含空值,而如果唯一性限制式由多列組成,其中的部分列可以包含空值。同時,注意Oracle中不容許在相同列上既建立主鍵又建立唯一性限制式。

例如學生表Student(id, stu_id, stu_name, sex, email, year),其中主鍵是學生學號(stu_id, year),假設該表學生每年都需要錄入一遍資料,所以兩個欄位構成主鍵。
同時為了方便遍曆,序號id也需要設定不同,這時候就需要id設定為唯一性。

唯一性限制式可以在建立表時或使用ALTER TABLE語句建立。
建立唯一性限制式的SQL語句如下:

ALTER TABLE table_name  ADD CONSTRAINT constraint_name  UNIQUE (column1, column2, ... , column_n); 
刪除唯一性限制式的SQL語句如下:
ALTER TABLE table_name  DROP CONSTRAINT constraint_name;  
使用Navicat for Orcale方法如下:

兩種方法均可設定唯一性限制式:
alter table T_USER_INFO add constraint u_id unique(ID);
alter table T_USER_INFO  add unique(ID);

此時查看錶T_USER_INFO結構如下所示,其中使用者名稱為主鍵:

同樣查看唯一性可以看到剛設定的序號ID:
當修改表T_USER_INFO中ID欄位,出現相同值或插入資料ID已經存在的時候,會報錯:

二. 設定遞增序列

前面講述的插入序號ID,但是資料庫中序號肯定會很多,如何在插入ID資料過程中更方便避免重複的插入呢?這就涉及到了設定ID為遞增序列的方法。
Navicat for Orcale不像MySQL只需要勾選遞增序列即可,它需要SQL語句來設定。所以這部分內容也非常重要,希望對你有所協助。

主要步驟包括:
        1) 設定序列
        2) 設定對應序列和表的觸發器
        3) 插入資料時使用對應的觸發器
具體方法如下:

第一部分 設定序列
1.通過點擊"其他=》序列"可以操作序列:


2.點擊進去後可以設計序列、建立序列、刪除序列。


3.同樣可以通過代碼增加序列,對應上面的表T_USER_INFO使用者表。
CREATE SEQUENCE User_Info_SEQ  minvalue 1  maxvalue 9999999999999999999  increment by 1  start with 1;  

4.點擊建立的序列User_Info_SEQ後可以發現具體的序列:

第二部分 設定觸發器
5. 然後設定對應表T_USER_INFO中欄位ID的觸發器,實現在向表中插入資料前自動插入自增長的序列。
CREATE OR REPLACE TRIGGER Trigger_User    BEFORE INSERT ON T_USER_INFO    for each row    when(NEW.ID is NULL)  begin    select User_Info_Seq.Nextval into :NEW.ID from dual;    end;  
建立成功如所示,注意不能缺少when(NEW.ID is NULL),因為在插入資料時會預設ID這個值,讓觸發器自動補充。


6.查看錶T_USER_INFO結構可以查看對應的觸發器:
但有可能會報編譯錯誤[Err] ORA-24344: success with compilation error。其原因是表的所有列名都需要大寫,也可以手動添加“更新列位”,否則雖然有增加觸發器,但是更新列位為空白,所以這個插入是不成功的,插入時也不會觸發主鍵的序列。

第三部分 插入資料
7.插入資料
insert into T_USER_INFO (USERNAME,PWD,STATUS,DW_NAME,DW_CODE) values('eastmount','000000','2','軟體學院','08111003');
此時能插入資料,其中欄位ID會自動添加。

如果報錯[Err] ORA-00001: unique constraint (GUICAI.SYS_C0017014) violated,如所示。這可能是因為表中設定了唯一性ID,出現重複資料的現象。如果不能設定唯一性限制式且需要保持唯一性,推薦使用sys_guid()函數產生唯一編碼。其實質想法是擷取表中最大ID值再自動加1。


參考:Oracle實作類別似SQL SERVER列自增長功能-jssg_tzw
          Oracle中添加自動編號的序列-左What
          oracle中DB設計時id唯一性(或者自增)怎麼設定


最後還是希望文章對你有所協助,這篇文章主要是我關於Navicat for Orcale軟體的使用方法,包括設定唯一性和遞增序列的實驗,主要通過圖文的形式進行講述,可能這個很簡單的問題複雜化了,但是對初學者來說還是有一定協助的,高手勿噴~
最近真的好忙,昨天就睡了4個小時,現在又熬夜到淩晨五點了,但是每每分享一篇部落格之後,感覺都非常興奮或開心,有些東西不能言表,開心就好!
(By:Eastmount 2016-04-11 清晨5點  http://blog.csdn.net/eastmount/)

[資料庫] Navicat for Oracle設定唯一性和遞增序列實驗

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.