oracle 唯一約束 和 唯一索引____oracle

來源:互聯網
上載者:User

唯一性限制式

唯一性限制式指表中一個欄位或者多個欄位聯合起來能夠唯一標識一條記錄的約束。聯合欄位中,可以包含空值。
註:在Oracle中,唯一性限制式最多可以有32列。
唯一性限制式可以在建立表時或使用ALTER TABLE語句建立。

唯一性限制式和主鍵的區別
主鍵(Primary Key):所有組成主鍵的列都不能包含空值。唯一性限制式(Unique Constraint):如果唯一性限制式由多列組成,其中的部分列可以包含空值。Oracle中不容許在相同列上既建立主鍵又建立唯一性限制式。

1、建立聯合約束(下面該條sql的作用是STAFF_ID, FIRST_NAME, LAST_NAME不能同時相等)

eg:alter table T_GJCX_EMP

  add constraint T_GJCX_EMP_JOINT_KEY unique (STAFF_ID, FIRST_NAME, LAST_NAME)
(1)基於單列的唯一性限制式
alter table tb_supplier
add constraint  tb_supplier_u1
unique (supplier_id);

(2)基於多列的唯一性限制式
alter table tb_products
add constraint  tb_products_u1
unique (product_id,product_name);

2 、禁用唯一性限制式
(1)文法:
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;
(2)樣本:
ALTER TABLE tb_supplier
DISABLE CONSTRAINT  tb_supplier_u1;

問題:

建立表的唯一性索引【CREATE UNIQUE INDEX idx_ut ON t(NVL2(NULLIF(b,3),a,NULL),NVL2(NULLIF(b,3),b,NULL),NVL2(NULLIF(b,3),c,NULL))】

和建立表的唯一性限制式的異同:
唯一約束可以用於保證在基表中增加一條記錄時,一個或多個列值是唯一的。如果已經給一個或以上列定義了唯一約束,那麼任何操作都不可能替換這些列中的複製的值。儘管唯一的、系統要求的索引是用來加強唯一約束,但是定義唯一約束和建立唯一索引之間還是有區別的。即使這二者之間都可以增強唯一性,唯一索引允許NULL值並且一般不能用在指示性約束中。換句話說,唯一約束不允許NULL值並能在外鍵規範中使用( "NULL"的意思就是列值不明確並且和其他值不同,還包括其他NULL值)。

總結:唯一索引就是唯一索引,唯一約束是通過唯一索引來實現的,建立唯一約束時會建立一個唯一索引 前提條件是約束列上沒有唯一索引。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.