Oracle | PL/SQL唯一索引(Unique Constraint)使用方法
1 目標
用演示樣例演示怎樣創建、刪除、禁用和使用唯一性約束。
2 什么是唯一性約束?
唯一性約束指表中一個字段或者多個字段聯合起來可以唯一標識一條記錄的約束。
聯合字段中,可以包括空值。
注:在Oracle中,唯一性約束最多能夠有32列。
唯一性約束能夠在創建表時或使用ALTER TABLE語句創建。
3 唯一性約束和主鍵的差別
- 主鍵(Primary Key):全部組成主鍵的列都不能包括空值。
- 唯一性約束(Unique Constraint):假設唯一性約束由多列組成,當中的部分列能夠包括空值。
- Oracle中不容許在同樣列上既創建主鍵又創建唯一性約束。
4 創建表時定義唯一性約束
1)語法:
CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT constraint_name UNIQUE (column1, column2,...,column_n) );
2)基於單列的唯一性約束演示樣例:
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)基於多列的唯一性約束演示樣例:
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)語法
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... , column_n);
2)演示樣例准備,先創建表
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)基於單列的唯一性約束
alter table tb_supplier add constraint tb_supplier_u1 unique (supplier_id);
4)基於多列的唯一性約束
alter table tb_products add constraint tb_products_u1 unique (product_id,product_name);
6 禁用唯一性約束
1)語法:
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
2)演示樣例:
ALTER TABLE tb_supplier DISABLE CONSTRAINT tb_supplier_u1;
7 使用唯一性約束
1)語法:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
2)演示樣例:
ALTER TABLE tb_supplier ENABLE CONSTRAINT tb_supplier_u1;
8 刪除唯一性約束
1)語法:
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
2)演示樣例:
ALTER TABLE tb_supplier DROP CONSTRAINT tb_supplier_u1; ALTER TABLE tb_products DROP CONSTRAINT tb_products_u1;---------------------------------------------------------------------------------------------------------
假設您們在嘗試的過程中遇到什么問題或者我的代碼有錯誤的地方,請給予指正,很感謝!
聯系方式:david.louis.tian@outlook.com
版權@:轉載請標明出處!----------------------------------------------------------------------------------------------------------