Oracle約束操作
約束是在表中定義的用於維護數據庫完整性的一些規則
注意
主鍵約束(primary key)
主鍵約束的特點
定義為主鍵約束的字段中不能包含任何重復值
同
可以為一個字段定義主鍵約束
oracle會自動為具有主鍵約束的字段建立
例如
create table person
(
p_id int primary key
p_name varchar
p_age int
);
create table person
(
p_id int constraint p_pk primary key
p_name varchar
p_age int
);
create table person
(
p_id int
p_name varchar
p_age int
constraint p_pk primary key (p_id
);
非空約束(not null)
非空約束的特點
定義了非空約束的字段中不能包含null值
只能在字段級定義非空約束
在同一個表中可以定義多個非空約束
例如
create table person
(
p_id int
p_name varchar
p_age int
);
唯一約束(unique):
唯一約束的特點
定義了唯一約束的字段中不能包含重復值
可以為
oracle會自動為具有唯一約束的字段建立
對同一字段可以同時定義非空和唯一約束
如果在
例如
create table person
(
p_id int
p_name varchar
p_age int
);
create table person
(
p_id int
p_name varchar
p_age int
);
create table person
(
p_id int
p_name varchar
p_age int
constraint p_un unique(p_name)
);
外鍵約束(foreign key)
外鍵約束的特點
定義為外鍵約束的字段中只能包含相應的其他表中引用字段的值或null值
可以為
定義了外鍵約束的字段和相應的引用字段可以存在於同
對同
主表中的被引用列
例如
create table person
(
p_id int
p_name varchar
p_age int
w_id int
constraint p_fk foreign key (w_id) references works(w_id)
);
create table person
(
p_id int
p_name varchar
p_age int
w_id int constraint p_fk references works
);
create table person
(
p_id int
p_name varchar
p_age int
w_id int references works
);
在定義外鍵約束時
刪除子表中所有相關的記錄(delete cascade)
將所有相關記錄的外鍵值設置為null(delete set null)
檢查約束(check)
檢查約束的特點
在檢查約束的表達式中必須引用到表中的一個或多個字段
在表達式中不能包含子查詢
在表達式中不能包含sysdate
檢查約束可以在字段級和表級定義
對同一個字段可以定義多個檢查約束
例如
create table person
(
p_id int
p_name varchar
p_age int check(p_age >
);
create table person
(
p_id int
p_name varchar
p_age int constraint p_check check(p_age >
);
增加約束
如果增加UNIQUE
如果增加NOT NULL約束
ALTER TABLE table_name ADD [CONSTRAINT constraint_name]
constraint_type (column
ALTER TABLE table_name MODIFY column
[CONSTRAINT constraint_name] NOT NULL;
添加外鍵約束
alter table emp add foreign key (deptno) references dept(deptno);
alter table emp add constraint d_fk foreign key (deptno) references dept(deptno);
添加主鍵約束
alter table table_name add primary key(column_name);
alter table table_name add constraint t_pk primary key(column_name);
添加非空約束
alter table person modify p_name not null;
alter table person modify p_name constraint t_notnull not null;
約束延遲(在事務提交時再驗證
deferrable
not deferrable
單獨deferrable的含義就是是否允許約束檢查延後進行
創建約束時
create table tt
(
id int primary key deferrable initially deferred
);
set constraints 約束名 immediate; 關閉約束延遲
set constraints 約束名 deferred; 開啟約束延遲
也可以在session級設置
alter session set constraints=immediate;
alter session set constraints=deferred;
重命名約束
alter table 表名 rename constraint 原約束名 to 新約束名
刪除約束
alter table 表名 drop constraint 約束名;
alter table 表名 drop constraint 約束名 cascade;
約束失效
alter table 表名 disable constraint 約束名
alter table 表名 disable constraint 約束名cascade;
約束生效
alter table 表名 enable constraint 約束名
novalidate:
validate
控制現有數據是否應用約束
alter table t
alter table t
alter table t
alter table t
注
查詢約束信息
視圖名字 描述
all_constraints 包含所有的約束基本描述信息
dba_constraints
user_constraints
all_cons_columns 包含定義課約束的字段信息
dba_cons_columns
user_cons_columns
From:http://tw.wingwit.com/Article/program/Oracle/201311/17214.html