一、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);