先概扩性的讲下约束吧,约束一般是在创建表时创建的,关键字constraint 约束大致有如下几种
1、not null; 不可为空,一般在添加字段属性写入或建表时写入,且写在最末;
2、unique; 不可重复;
3、primary key; 主键, 不可为空,不能重复;
4、foreign key; 外键, 不可为空;
5、check;条件;
6、default;默认值,跟在字段后;
首先创建一个表吧,因为要讲联级,创建两个表才是,一个父表,一个子表,先把父表随便一下吧。
父表:尺码表;主键:cima_id;
create table cima (
cima_id varchar2(4),
cima_name varchar2(12) not null,
constraint ca_id primary key(cima_id)
);
插入一些数据:
insert into cima values('36','36码');
insert into cima values('37','37码');
insert into cima values('38','38码');
commit; --最后提交;
查询一下数据:
select * from cima;
下面接着创建一个子表;衣服表吧;主键: yifu_id;
create table yifu (
yifu_id varchar2(4),
yifu_name varchar2(6) not null,
yifu_sal number(6,2),
yifu_pinpai varchar2(10) default '沃特', --默认值;
cima_id varchar(4),
constraint yf_name unique(yifu_name), --不重复;
constraint yf_sal check (yifu_sal > 100), --条件;
constraint yf_id primary key(yifu_id), --主键;
foreign key(cima_id) references cima(cima_id) on delete cascade --外键;
);
注意:子表中的外键类型要与父表的主键类型一致;约束只能添加或删除,但是不能修改
添加约束:
alter table (表名) add(
constraint + (约束名) + 约束条件
);
添加 NOT NULL 约束要使用 MODIFY 语句:
alter table (表名) modify(
(字段名) + (字段类型) + not null
);
删除约束:
alter table (表名) drop constraint (约束名);
无效化约束,disable,约束将失效;
alter table (表名)disable constraint (约束名);
激活约束,enable;
alter table (表名)enable constraint (约束名);
插入数据:
insert into yifu(yifu_id,yifu_name,yifu_sal,cima_id) values('0001','女鞋','200',36);
insert into yifu(yifu_id,yifu_name,yifu_sal,cima_id) values('0002','男鞋','300',37);
insert into yifu(yifu_id,yifu_name,yifu_sal,cima_id) values('0003','休闲鞋','230',36);
insert into yifu(yifu_id,yifu_name,yifu_sal,cima_id) values('0004','运动鞋','230',38);
查询数据:
select * from yifu;
因为我创建表是规定了表的约束,其中yifu_id为主键,不能重复且不可为空,yifu_name不可重新,yifu_sal要大于100,yifu_pinpai默认是沃特,cima_id为外键,且可以联级删除(on delete cascade),联级置空是(on delete set null);
上面子表中constraint后面跟着的是约束名,外键创建时要有关键字references 跟着父表(外键id);
查询表的约束名:
select * from user_constraints where table_name = 'YIFU'; --表名要大写;
系统默认约束名是以SYS_C拼接字符组成的;
下面我将演示什么是联级删除(on delete cascade)与联级置空(on delete set null);
联级删除与联级置空都是因为父表删除一个主键,而其主键id又被子表用到了,所以会报错误异常;
这时就用到了我们的联级删除与联级置空了。
删除父表主键数据:
delete from cima where cima_id = 36;
联级删除表数据显示:
cima_id等于36的数据在子表中也删除了;
联级置空表数据显示:
cima_id等于36的数据还在,只是cima_id等于36清空了;