oracle之约束

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:oracle之约束

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、not null

--创建表是直接指定
 create table orders(
 order_num number(4) constraint nn_orader_num not null,
 order_date date not null,
 product_id number);
--创建表后修改
alter table orders modify product_id not null;

二、check

--创建表时直接指定
 create table bouns(
 emp_id number not null,
 salary number(9,2) check(salary>500),
 bonus number(9,2),
 constraint ck_bonus check(bonus>100));
--创建表后修改
alter table bouns add constraint ck_bonus2 check(bonus<salary);
alter table bouns drop constraint ck_bonus2;--删除约束条件

三、unique

--最简单的创建
create table f3(id number unique);
--多列的索引
create table f4(id number,
name varchar2(20),
pwd varchar2(20),
constraint unique_f4 unique(id,pwd));
--添加unique和指定index相关信息
alter table fei
add constraint uq_fei_1np unique(id,pwd)
using index tablespace users
storage(initial 32k next 32k pctincrease 0) nologging;
--添加一列,包括unique
alter table fei add abc varchar2(11) constraint un_abc unique;
--删除unique
alter table d drop unique(id) cascade;--cascade可选(外键时强制删除)

四、primar key

--最基本的primary key
create table f5(id number primary key);
--主键为多列的情况
create table f6(id number,name varchar2(22),
constraint pk_f6 primary key(id,name));
--直接index的相关信息
create table f7(id number,name varchar2(20),
pwd varchar2(20),constraint pk_f7 primary key(id,pwd)
using index tablespace users
storage(initial 64k next 64k) nologging)
tablespace abc;
alter table a drop primary key cascade;--删除主键(外键时强制删除)

五、foreign key

--最简单的foreign key
create table a(id number primary key,name varchar2(10));
 create table b(id number references a(id));
--修改表的方式添加foreign key
create table c(id number,name varchar2(10));
alter table c add constraint fk_c foreign key(id) references a(id) on delete cascade;
--note:外键的三种删除方式:delete no action(default,如果外键中存在,主键中不能被删除)
--delete cascade(如果删除主键,强制删除外键中的内容)
--delete set null(删除主键,外键中内容变为null)
alter table c drop constraint fk_c;--删除外键约束

六、约束条件disable

alter table c add constraint pk_c  primary key(id) disable;
--noet:在创建条件后面加上disable
alter table c enable constraint pk_c;--启用约束性关系

七、(disable/enable)与(validate/novalidate)组成的四种状态

alter table a enable validate primary key;--(new、old数据都要检查)
alter table a enable novalidate primary key;--(new数据都要检查)
alter table a disable validate primary key;--(只读状态)
alter table a disable novalidate primary key;--(new、old数据都不检查)
select constraint_name,status,validated from user_constraints;--查询所属状态
--note:从disable novalidate状态转换为其他状态时,要考虑隐藏的unique index的存在

八、deferred延迟检查

alter table fei add constraint pk_fei primary key(id) deferrable;
set constraint pk_fei deferred;--或者set constraints all deferred;
--note:1)设置为deferrable时,如果建立隐形index则为NONUNIQUE
--2)建立constraint时,默认情况下是立即检查,而不是等到commit时检查
--3)如果没有set设置,默认还是为immediate(立即执行)

九、oracle约束状态转换冲突数据统计

--建立统计数据表
create table exceptions(row_id urowid,
 owner varchar2(30),
 table_name varchar2(30),
 constraint varchar2(30));
--创建表
create table t(id number primary key disable,name char(20));
--转换状态语句后面加exceptions into exceptions
alter table t enable validate primary key exceptions into exceptions;
--查看冲突数据
select rowid,id,name from t where rowid in (select row_id from exceptions);
此条目发表在 Oracle 分类目录。将固定链接加入收藏夹。

评论功能已关闭。