您的位置:首页 > 数据库 > Oracle

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

2017-04-20 00:06 826 查看
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操作

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐