Oracle | PL/SQL唯一索引(Unique Constraint)用法 1 目標
用樣本示範如何建立、刪除、禁用和使用唯一性限制式。 2 什麼是唯一性限制式。
唯一性限制式指表中一個欄位或者多個欄位聯合起來能夠唯一標識一條記錄的約束。聯合欄位中,可以包含空值。
註:在Oracle中,唯一性限制式最多可以有32列。
唯一性限制式可以在建立表時或使用ALTER TABLE語句建立。 3 唯一性限制式和主鍵的區別
主鍵(Primary Key):所有組成主鍵的列都不能包含空值。唯一性限制式(Unique Constraint):如果唯一性限制式由多列組成,其中的部分列可以包含空值。Oracle中不容許在相同列上既建立主鍵又建立唯一性限制式。
4 建立表時定義唯一性限制式 1)文法:
?
| 1 2 3 4 5 6 7 |
CREATE TABLE table_name ( column1 datatype null / not null , column2 datatype null / not null , ... CONSTRAINT constraint_name UNIQUE (column1, column2,...,column_n) ); |
2)基於單列的唯一性限制式樣本: ?
| 1 2 3 4 5 6 7 |
create table tb_supplier ( supplier_id number not null ,supplier_name varchar2(50) ,contact_name varchar2(50) , CONSTRAINT tb_supplier_u1 UNIQUE (supplier_id) --建立表時建立唯一性限制式 ); |
3)基於多列的唯一性限制式樣本: ?
| 1 2 3 4 5 6 7 8 |
create table tb_products ( product_id number not null , product_name number not null , product_type varchar2(50), supplier_id number, CONSTRAINT tb_products_u1 UNIQUE (product_id, product_name) --定義複合唯一性限制式 ); |
5 使用ALTER TABLE文法建立唯一性限制式
1)文法 ?
| 1 2 3 |
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... , column_n); |
2)樣本準備,先建立表 ?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
drop table tb_supplier; drop table tb_products; create table tb_supplier ( supplier_id number not null ,supplier_name varchar2(50) ,contact_name varchar2(50) ); create table tb_products ( product_id number not null , product_name number not null , product_type varchar2(50), supplier_id number ); |
3)基於單列的唯一性限制式 ?
| 1 2 3 |
alter table tb_supplier add constraint tb_supplier_u1 unique (supplier_id); |
4)基於多列的唯一性限制式 ?
| 1 2 3 |
alter table tb_products add constraint tb_products_u1 unique (product_id,product_name); |
6 禁用唯一性限制式
1)文法: ?
| 1 2 |
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name; |
2)樣本: ?
| 1 2 |
ALTER TABLE tb_supplier DISABLE CONSTRAINT tb_supplier_u1; |
7 使用唯一性限制式
1)文法: ?
| 1 2 |
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name; |
2)樣本: ?
| 1 2 |
ALTER TABLE tb_supplier ENABLE CONSTRAINT tb_supplier_u1; |
8 刪除唯一性限制式
1)文法: ?
| 1 2 |
ALTER TABLE table_name DROP CONSTRAINT constraint_name; |
2)樣本: ?
| 1 2 |
ALTER TABLE tb_supplier DROP CONSTRAINT tb_supplier_u1; ALTER TABLE tb_products DROP CONSTRAINT tb_products_u1; |