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;
--------------------------------------分割線 --------------------------------------
rlwrap - 解決Linux下SQLPLUS退格、上翻鍵亂碼問題
SQLPLUS spool 到動態記錄檔名
Oracle SQLPLUS提示符設定
通過設定SQLPLUS ARRAYSIZE(行預取)加快SQL返回速度
PL/SQL Developer實用技巧分享
--------------------------------------分割線 --------------------------------------