oracle约束+disable与enable约束+为表添加约束+修改表约束的状态+primary key+not null+unique+foreign key+外键删除数据,可以使用的级联操作

来源:互联网 发布:北京圆之翰大数据 编辑:程序博客网 时间:2024/06/06 18:32

oracle约束
分类
表级约束:应用于表,对表的多个列起作用。或者说定义所有列后,再定义约束,not null 约束只能在列级上。
列级约束:应用于表的一列,只对该列起作用。或者说定义列的同时定义约束。

disable与enable约束
控制约束的约束
控制表的约束是禁用还是激活状态
disable:禁止状态,相当于该列没有约束
enable:激活状态,默认新创建的约束状态是激活状态

为表添加约束
这里写图片描述

修改表约束的状态
语法1
alter table tableName modify constraint restrainName disable | enable ;

alter table student3 modify constraint uniSname disable;
这里写图片描述

primary key:主键由一列或多列组成
主键,非空,不能重复
完整性约束

实现主键约束:
1.建表的时候在列后面添加primary key

constraint 约束名 primary key(列明));
constraint pk_id primary key(id));
这里写图片描述
这里写图片描述
多次插入同一个数据违反约束条件
这里写图片描述

2.已存在的表添加约束:
alter table 表名 add contraint 约束名 约束;
前提:列的值要满足约束条件
alter table people add constraint pk_id primary key(id);
这里写图片描述
测试的时候我是删了数据在加上约束
这里写图片描述

not null
非空;
列的所有值不能为空
语法:
建表的时候 列后面加上not null;
表存在的时候:alter table B modify 列名 not null;
这里写图片描述

删除not null 约束
alter table B modify 列名 null;

unique
唯一:
指定一列或一组列只能存储唯一的值(多列情况,只要保证不全部相同就可以)
语法:
建表的时候在列后面加上unique
表存在的时候:alter table B add constraint 唯一约束名 unique(列名)
这里写图片描述
删除unique约束
alter table tableName drop unique(列名)
alter table tableName drop constraint 约束名

foreign key
外键:维护子表和父表之间的引用完整性
引用完整性约束;
用于引用本表或者另一个表的一列或者一组列。
引用列或者被引用列可以在同一个表中,这种情况称自引用

1被引用的列或者列组应该具有主键约束或者唯一约束
2引用列的取值只能为被引用列的值或者null值
3可以为一列或一组列定义为foreign key
4如果引用列中存储了被引用列的某个值,则不能删除被引用列的某个值,
否则与2相矛盾,如果要删除,先删除引用列的值,才删除被引用列的值。

1建表的时候添加约束
列名1 数据类型【default 默认值】 【【constrant 约束名】
references tableName2(列名2)

create table class(
cno varchar2(10) primary key,
cname varchar2(20),
cnum number(2)
);

create table student2(
sno varchar2(10) primary key,
sname varchar2(20),
sage number(2),
cno varchar2(2) constraint fk_sno references class(cno)
);
这里写图片描述
或者
create table tableName1(
columnName1 数据类型【default 默认值】
constraint 约束名 foreign key(列名1) references 父表(列名2)
】)
列名1 :本表的列
列名2:父表的主键列
references :用于定义列名1指向其他表中的列名2

create table class(
cno varchar2(10) primary key,
cname varchar2(20),
cnum number(2)
);

create table student2(
sno varchar2(10) primary key,
sname varchar2(20),
sage number(2),
cno varchar2(2),
constraint fk_sno foreign key(cno) references class(cno)
);

这里写图片描述

2为以存在的表中的列添加外键
alter table tableName add 【constraint 约束名 】
foreign key(列名1) references 父表(列名2)

create table class(
cno varchar2(10) primary key,
cname varchar2(20),
cnum number(2)
);

create table student2(
sno varchar2(10) primary key,
sname varchar2(20),
sage number(2),
cno varchar2(10)
);
alter table student2
add
constraint fk_sno foreign key(cno) references class(cno)
这里写图片描述

注意:
创建的时候先建父表,在建子表
删除表的时候的先删子表,再删父表
这里写图片描述

插入有数据的值,值需要在父表中可以被找到
允许外键为空

这里写图片描述

删除父表数据的时候:父表的数据必须没有被子表使用
这里写图片描述

外键删除数据,可以使用的级联操作

on delete cascade:当删除父表被引用的数据时,级联删除子表中相应的数据行
on delete set null:当删除父表被引用的数据时,级联设置子表中相应的引用列的值为null,前提该列支持设置为null

on delete no action:当删除父表被引用的数据时,如果子表的引用列包含该值,禁止删除操作,默认为此选项

on delete set null操作
create table class(
cno varchar2(10) primary key,
cname varchar2(20),
cnum number(2)
);

create table student2(
sno varchar2(10) primary key,
sname varchar2(20),
sage number(2),
cno varchar2(2),
constraint fk_sno foreign key(cno) references class(cno) on delete set null
);
这里写图片描述
添加数据
insert into class values(‘1’,’一班’,55);
insert into student2 values(‘1’,’lili’,18,’1’);
这里写图片描述

删除父表被引用的数据
delete class where cno=’1’;
这里写图片描述

查看子表的数据是否因为父表的数据被删除导致相应列的值被设置为null,

结果:子表中相应的引用列的值为null
select * from student2;
这里写图片描述
on delete cascade操作
这里写图片描述

0 0
原创粉丝点击