SQL语言之定义约束

定义约束


一、数据库中的约束类型


在这里插入图片描述

非空约束(not null)
唯一性约束(unique)
主键约束(primary key)
外键约束(foreign key)
用户自定义约束(check)

定义约束的原则

1.在创建表的同时,或者在创建表之后都可以定义约束。
2.可以给约束其名字,但约束名不能相同,必须是唯一的。如果没有为约束起名 字,Oracle服务器将用默认格式SYS_Cn产生一个名字,这里的n是一个唯一 的整数,所以约束名是唯一的;


二、定义not null约束


在这里插入图片描述

创建表时定义not null约束;

创建表dept80,包括ID,名字,薪水,姓名与薪水列不可以为空,并给薪水的非	空约束自定义一个名字;
Create table dept80(id number,name varchar2(10) not null,salary number constraint dept80_dsn not null );

修改表定义not null约束
(以hr用户中的dept80表为例)

向dept80表中添加location_id列;
Alter table dept80 add(location_id number);

修改dept80表中location_id列的约束为非空约束,并为其定义名字;
Alter table dept80 modify(location_id constraint dept80_ln not null);

三、定义unique约束


在这里插入图片描述

创建表时定义unique

创建表dept90,包括ID,名字,将ID定义唯一约束,并自定义名字;
Create table dept90(id number constraint dept90_iduk unique,name varchar2(20));

修改表定义unique约束;
(以hr用户中的dept90表为例)

将dept90表中的名字列修改为唯一约束;
 Alter table dept90 modify(name unique);

四、定义primary key约束


在这里插入图片描述

创建表时定义primary key约束

创建dept70表,包括ID,并为ID定义主键约束,以及定义约束名字;
 Create table dept70(id number constraint dept70_id_pk primary key);

修改表定义primary key约束

创建dept60表,包含ID;
 Create table dept60(id number);
 
将dept60表中的ID列修改为主键约束,并为其自定义名字;
Alter table dept60 modify(id constraint dept60_id_pk primary key);


**创建联合主键**
创建dept50表,包括ID,名字,将为ID与名字列都定义主键约束,并为其自定义	名字;
Create table dept50(id number , name varchar2(20) , constraint dept50_pk primary 	key(id,name));

五、定义foreign key约束(特殊,不支持在后面直接添加定义约束)


在这里插入图片描述

创建表时定义foreign key

创建dept40表,包括ID、d_id,为d_id列定义外键约束并自定义名字(参照dept60	表中的ID列);
 Create table dept40(id number , d_id number , constraint dept40_fk foreign key(d_id) 	references dept60(id) );

修改表定义foreign key

例
向dept50表中添加d_id列;
 Alter table dept50 add(d_id number);
将dept50中的d_id列定义外键约束(参照dept60表中的ID列),并自定义名字;
Alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);

六、定义check约束


在这里插入图片描述

创建表时定义check约束

创建dept30表,包括ID、薪水,薪水不能小于1000,并自定义名字;
 Create table dept30(id number , salary number(8,2) , constraint dept30_ck check(salary > 	1000));

修改表定义check约束

向dept50表中添加薪水列;
 Alter table dept50 add(salary number(8,2));
修改dept50表中的薪水不能小于1000,并自定义名字;
 Alter table dept50 add constraint dept50_ck check(salary > 1000); 

七、 禁用与启用约束


查看约束
在这里插入图片描述

(以hr用户中的dept50表为例)

查看dept50表下的所有约束类型,约束名字;
Select constraint_name,constraint_type,search_condition from user_constraints 	where lower(table_name) = ‘dept50’;

禁用约束
在这里插入图片描述

(以hr用户中的dept50表为例)

	禁用dept50下的自定义约束;
	 Alter table dept50 disable constraint dept50_ck;
	级联禁用
	禁用dept60表中的主键约束;
	 Alter table dept60 disable constraint dept60_id_pk cascade;

启用约束
在这里插入图片描述

(以hr用户中的dept50表为例)

 启用dept50下的自定义约束;
  Alter table dept50 enable constraint dept50_ck;
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值