Oracle之唯一性約束(UNIQUE Constraint)用法詳解
阿新 • • 發佈:2019-01-03
1 目標
用示例演示如何建立、刪除、禁用和使用唯一性約束。
2 什麼是唯一性約束?
唯一性約束指表中一個欄位或者多個欄位聯合起來能夠唯一標識一條記錄的約束。聯合欄位中,可以包含空值。
注:在Oracle中,唯一性約束最多可以有32列。
唯一性約束可以在建立表時或使用ALTER TABLE語句建立。
3 唯一性約束和主鍵的區別
- 主鍵(Primary Key):所有組成主鍵的列都不能包含空值。
- 唯一性約束(Unique Constraint):如果唯一性約束由多列組成,其中的部分列可以包含空值。
- Oracle中不容許在相同列上既建立主鍵又建立唯一性約束。
4 建立表時定義唯一性約束
1)語法:
- CREATETABLE table_name
- (
- column1 datatype null/notnull,
- column2 datatype null/notnull,
- ...
- CONSTRAINT constraint_name UNIQUE (column1, column2,...,column_n)
- );
2)基於單列的唯一性約束示例:
- createtable tb_supplier
- (
- supplier_id number notnull
-
,supplier_name varchar2(50)
- ,contact_name varchar2(50)
- ,CONSTRAINT tb_supplier_u1 UNIQUE (supplier_id)--建立表時建立唯一性約束
- );
3)基於多列的唯一性約束示例:
- createtable tb_products
- (
- product_id number notnull,
- product_name number notnull,
- product_type varchar2(50),
- supplier_id number,
-
CONSTRAINT
- );
5 使用ALTER TABLE語法建立唯一性約束
1)語法
- ALTERTABLE table_name
- ADDCONSTRAINT constraint_name
- UNIQUE (column1, column2, ... , column_n);
2)示例準備,先建立表
- droptable tb_supplier;
- droptable tb_products;
- createtable tb_supplier
- (
- supplier_id number notnull
- ,supplier_name varchar2(50)
- ,contact_name varchar2(50)
- );
- createtable tb_products
- (
- product_id number notnull,
- product_name number notnull,
- product_type varchar2(50),
- supplier_id number
- );
3)基於單列的唯一性約束
- altertable tb_supplier
- addconstraint tb_supplier_u1
- unique (supplier_id);
4)基於多列的唯一性約束
- altertable tb_products
- addconstraint tb_products_u1
- unique (product_id,product_name);
6 禁用唯一性約束
1)語法:
- ALTERTABLE table_name
- DISABLE CONSTRAINT constraint_name;
2)示例:
- ALTERTABLE tb_supplier
- DISABLE CONSTRAINT tb_supplier_u1;
7 使用唯一性約束
1)語法:
- ALTERTABLE table_name
- ENABLE CONSTRAINT constraint_name;
2)示例:
- ALTERTABLE tb_supplier
- ENABLE CONSTRAINT tb_supplier_u1;
8 刪除唯一性約束
1)語法:
- ALTERTABLE table_name
- DROPCONSTRAINT constraint_name;
2)示例:
- ALTERTABLE tb_supplier DROPCONSTRAINT tb_supplier_u1;
- ALTERTABLE tb_products DROPCONSTRAINT tb_products_u1;