Oracle数据库知识学习之约束的注意事项和实例解析
什么是约束:
约束是表级的强制规定
有以下五种约束:
not null (非空)
unique (唯一)
primary key (主键)
foreign key (外键)
check (检查)
注意事项:
如果不指定约束名 ,oracle server 自动按照 sys_cn 的格式指定约束名
创建和修改约束:
建表的同时
建表之后
可以在表级或列级定义约束
可以通过数据字典视图查看约束
表级约束和列级约束:
作用范围:
①列级约束只能作用在一个列上
②表级约束可以作用在多个列上(当然表级约束也 可以作用在一个列上)
定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
not null 约束:
值不为空
unique 约束:
不允许出现相同的记录
允许出现多个空值:null。
代码:
create table teacher3( fid number primary key, fname varchar2(50) not null, femail varchar2(50) unique, ftel varchar2(20), constraint teacher3_tel_uq unique(ftel) )
下图空值是允许的:
primary key 约束:
可以定义在表级或者列级
唯一标示,不允许空值
代码示例:
fid number primary key,
foreign key 约束:
外键:在一个表作外键,另外一个表做主键
可以定义在表级或者列级
代码(表级):
--建表clas_info create table class_info( cid number primary key, students_count number ) --插入记录 insert into class_info values(1,20); insert into class_info values(2,30); insert into class_info values(3,50); insert into class_info values(4,70); --建表teacher4用外键fclass_id 关联表class_info create table teacher4( fid number primary key, fname varchar2(30) not null, femail varchar2(50) unique, fclass_id number , constraint teacher4_fclass_id_fk foreign key(fclass_id) references class_info(cid) )
换一种方法(列级):
--换一种方法 create table teacher5( fid number primary key, fname varchar2(30) not null, femail varchar2(50) unique, fclass_id number references class_info(cid) )
foreign key 约束的关键字:
foreign key: 在表级指定子表中的列
references: 标示在父表中的列
on delete cascade(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
on delete set null(级联置空): 子表中相应的列置空
check 约束:
定义每一行必须满足的条件。
代码示例:
--检查约束 create table teacher7( fid number primary key, fname varchar2(30), fage number check(fage>=18 and fage<=120), ftel varchar(30) )
添加约束的语法:
使用 alter table 语句:
添加或删除约束,但是不能修改约束
有效化或无效化约束
添加 not null 约束要使用 modify 语句
alter table table(名)
add constraint constraint(约束名)type (column)
代码示例:
alter table teacher7 add constraint teacher7_fname_qu unique(fname)
删除约束:
语法:
alter table table(要修改的表)
drop constraint constraint(约束名)
代码示例:
alter table teacher7 drop constraint teacher7_fname_qu
无效化约束:
在alter table 语句中使用 disable 子句将约束无效化。
代码示例:
alter table teacher7 disable constraint teacher7_fname_uq
激活约束:
enable 子句可将当前无效的约束激活 。
当定义或激活unique 或 primary key 约束时会自动创建unique 或 primary key索引。
代码示例:
alter table teacher7 enable constraint teacher7_fname_uq