欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle数据库知识学习之约束的注意事项和实例解析

程序员文章站 2022-03-23 19:30:36
什么是约束: 约束是表级的强制规定 有以下五种约束: not null (非空) unique (唯一) primary key (主键) foreign key (外键) check (检查) 注...

什么是约束:

约束是表级的强制规定

有以下五种约束:

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)
)

下图空值是允许的:

Oracle数据库知识学习之约束的注意事项和实例解析

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