Oracle表的约束与联级

先概扩性的讲下约束吧,约束一般是在创建表时创建的,关键字constraint 约束大致有如下几种

1not null; 不可为空,一般在添加字段属性写入或建表时写入,且写在最末;

2unique; 不可重复;

3primary key; 主键不可为空,不能重复;

4foreign key; 外键, 不可为空;

5check;条件;

6default;默认值,跟在字段后;

首先创建一个表吧,因为要讲联级,创建两个表才是,一个父表,一个子表,先把父表随便一下吧。

父表:尺码表;主键: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要大于100yifu_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清空了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值