Oracle学习笔记(八)。数据库约束。非空约束(NOT NULL),唯一性约束(UNIQUE),主键约束(PRIMARY KEY),外键约束(FOREIGN KEY),自定义约束(CHECK)


备注:本文中使用到的sql为HR用户提供的数据和表。HR用户介绍查看以下链接。
https://blog.csdn.net/weixin_45842494/article/details/122528264

定义约束

  • 非空约束(NOT NULL)
  • 唯一性约束(UNIQUE)
  • 主键约束(PRIMARY KEY)
  • 外键约束(FOREIGN KEY)
  • 用户自定义约束(CHECK)

在这里插入图片描述

1 定义约束原则

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

2 定义NOT NULL约束

在这里插入图片描述

2.1 创建表时定义NOT NULL约束

示例:

创建一个dept80表。

create table dept80(id number,name varchar2(20) not null,salary number constraint dept80_not not null);

说明:name的非空约束由系统自动起名,salary的非空约束被用户起名为dept80_not,注意使用了constraint关键字。

desc dept80;
Name   Type         Nullable Default Comments 
------ ------------ -------- ------- -------- 
ID     NUMBER       Y                         
NAME   VARCHAR2(20)                           
SALARY NUMBER 

2.2 修改表时定义NOT NULL约束

示例:

给dept表中的location_id列添加非空约束。

alter table dept80 modify location_id not null;

说明:想给定约束名称的话使用constraint关键字。

3 定义UNIQUE约束

在这里插入图片描述

3.1 创建表时创建unique约束

示例;

create table dept90 (id number constraint dept90_uk unique,name varchar2(20));

在这里插入图片描述

3.2 修改表时创建unique约束

示例:

alter table dept90 modify(name unique);

在这里插入图片描述

4 定义PRIMARY KEY约束

在这里插入图片描述

4.1 在创建表时定义PRIMARY KEY约束

create table dept70(id number constraint dept70_pk primary key);

在这里插入图片描述

4.2 在修改表时定义PRIMARY KEY约束

示例:

alter table dept60 modify(id constraint dept60_pk primary key);

在这里插入图片描述

4.3 创建联合主键

create table dept50(id number,name varchar2(20), constraint dept50_pk primary key(id,name));

在这里插入图片描述

5 定义FOREIGN KEY约束

在这里插入图片描述

注意:添加外键约束时被引用的表必须先存在。而且外键约束不能直接跟在列的后面创建。

5.1 创建表时定义FOREIGN KEY约束

示例:

create table dept40 (id number,d_id number,constraint dept40_fk foreign key(d_id) references dept60(id));

在这里插入图片描述

说明:创建了一个dept40表,表中的字段d_id参照于dept60表中id列。

5.2 修改表时定义FOREIGN KEY约束

示例:

alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);

在这里插入图片描述

说明:以上所有的修改是这个表和这个字段已经存在,仅是修改。

6 定义CHECK约束

在这里插入图片描述

6.1 创建表时定义CHECK约束

示例:

create table dept30 (id number,salary number(8,2) constraint dept30_ck check(salary>1000));

在这里插入图片描述

6.2 修改表时定义CHECK约束

alter table dept50 add constraint dept50_ck check(salary>1000);

在这里插入图片描述

7 禁用与启用约束

7.1 查看约束

在这里插入图片描述

表的约束被存放在user_constraints表中。

select constraint_name,constraint_type,search_condition from user_constraints where table_name = 'DEPT50';
CONSTRAINT_NAME                CONSTRAINT_TYPE SEARCH_CONDITION
------------------------------ --------------- --------------------------
DEPT50_PK                      P               
DEPT50_FK                      R               
DEPT50_CK                      C               salary>1000

说明:表明在Oracle数据库中都是大写,所以条件那里表明为大写。search_condition为检查约束的具体条件。

P:主键约束。R:外键约束。C:检查约束。

7.2 禁用约束

在这里插入图片描述

说明:如果要禁用的主键被其他表的外键所参照,就不能禁用,存在相关性。加上CASCADE(级联禁用)后会把和他关联的外键也禁用掉,这样就可以成功禁用。

alter table dept60 disable constraint dept60_pk;

在这里插入图片描述

alter table dept60 disable constraint dept60_pk cascade;

在这里插入图片描述

7.3 启用约束

在这里插入图片描述

示例:

alter table dept60 enable constraint dept60_pk;

说明:disable禁用约束。cascade:级联禁用约束。enable:启用约束。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻啦猫@_@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值