Oracle-----约束简介&非空约束&唯一约束&主键约束

Oracle数据库 专栏收录该内容
37 篇文章 4 订阅

上一篇👉:Oracle-----为表重命名&数据表删除&闪回技术&修改表结构


总目录👉震惊!史上最菜的Oracle 11g教程(大佬勿进)


🚴大家好!我是近视的脚踏实地,这篇文章主要是来讲学习Oracle中的约束是什么,以及距离说明什么是非空约束、唯一约束、主键约束
     唯有行动  才能解除你所有的不安

1、约束简介

数据表本身只支持数据的存储操作,但是在数据库上为了保证保证数据表中的数据完整性,特别增加了约束,数据需要满足若干条件之后才可以进行操作,例如:某些数据不能够重复,假设定义用户信息,身份证编号绝对不可能重复。本质上来讲,数据中的约束一共有六种:数据类型、非空约束、唯一约束、主键约束、检查约束、外键约束。

但是约束是一把双刃剑,约束的确是可以保证数据合法后才进行保存,但是如果在一个数据库里面,一张表中设置了过多的约束,那么更新的速度一定会慢。所以在开发中,某一些验证的操作还是强烈建议交给程序完成。

2、非空约束(not null、nk)

所谓的非空约束指的是表中的某一个字段的内容不允许为空,如果要使用非空约束,只需要字在每个列的后边利用not null声明即可。

2.1 范例1:使用非空约束

范例1: 使用非空约束

-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
	mid	number,
	name	varchar2(20) not null
);

表示name这个列上的数据不允许设置为null
在这里插入图片描述

2.2 范例2:正确地增加语句

范例2: 正确地增加语句

insert into member(mid,name) values(1,'张三');

在这里插入图片描述

2.3 范例3:错误地增加语句

范例3: 错误地增加语句

insert into member(mid,name) values(3,null);
或者
insert into member(mid) values(3);

在这里插入图片描述
在设置了非空约束之后,如果出现了违反非空约束的的操作,那么会自动准确地定位到哪个模式、哪张表、哪个字段,这样在进行错误排查的时候就很方便了。

3、唯一约束(unique、uk)

唯一约束的特点是在某一个列上的内容不允许出现重复,例如:收集用户的信息,假设包含编号、姓名、email,很明显,emai的数据不可能重复,所以就可以使用unique约束完成

3.1 范例1:使用唯一约束

范例1: 使用唯一约束

-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
    mid     number,
    name    varchar2(20) not null,
	email   varchar2(20) unique
);

在这里插入图片描述

3.2 范例2:正确地增加语句

范例2: 正确地增加语句

insert into member(mid,name,email) values(1,'张三','hello@hello.hello');

在这里插入图片描述

3.3 范例3:错误地增加语句

范例3: 错误地增加语句

insert into member(mid,name,email) values(2,'李四','hello@hello.hello');

在这里插入图片描述
在Oracle之中约束本身也称为一个对象,也就是说只要你设置了约束,那么Oracel会自动为你创建与之相关的约束对象信息,而这些过程都是自动完成的。那么既然是对象,所有的对象就会在数据字典之中进行保存,用户的约束的数据字典应该使用的是user_constraints

3.4 范例4:查询user_constraints数据字典

范例4: 查询user_constraints数据字典

select * from user_constraints;

在这里插入图片描述
那么这个数据字典查出来看着有点难受,选出几个字段出来显示以及调用列的格式👇:

col OWNER for A30;
col CONSTRAINT_NAME for A30;
col TABLE_NAME for A30;
select OWNER,CONSTRAINT_NAME,TABLE_NAME from user_constraints;

在这里插入图片描述
可以发现user_constraints 数据字典只是告诉用户约束属于哪张表,但是并没有告诉我们用户约束具体是哪个列上的,所以此时可以利用另外一个数据字典:user_cons_column

3.5 范例5:查询user_cons_column数据字典

范例5: 查询user_cons_column数据字典

select * from user_cons_columns;

在这里插入图片描述
那么很乱,同样需要格式化一下👇:

col OWNER for A30;
col CONSTRAINT_NAME for A30;
col TABLE_NAME for A30;
col COLUMN_NAME for A30;
select OWNER,CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME from user_cons_columns;

在这里插入图片描述
发现唯一约束不像非空约束那样,可以很明确地告诉用户是那个列上出现了问题,所以为了解决这样的错误,可以采用 “约束简写_表_字段”,例如唯一约束的简写 “UK”,那么现在是在email字段上设置了唯一约束,所以可以使用 “UK_email” 来作为此约束的一个名字。如果要指定名字,则必须在约束创建的时候完成,利用:constraint关键字定义

3.6 范例6:创建唯一约束,同时设置约束名称

范例6: 创建唯一约束,同时设置约束名称

-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
    mid     number,
    name    varchar2(20) not null,
    email   varchar2(20),
    constraint uk_email unique(email)
);

在这里插入图片描述
那么现在插入一条正确的语句👇:

insert into member(mid,name,email) values(1,'张三','hello@hello.hello');

在这里插入图片描述
再来插入重复邮箱的信息👇:
在这里插入图片描述
可以看到,此时提示为刚刚我们设置的约束名字,所以以后在进行数据表创建的时候,约束一定要设置名字。约束的名字绝对不能够重复。
如果说现在设置了唯一约束,但是保存的是null呢?

insert into member(mid,name,email) values(3,'王五',null);

在这里插入图片描述
可以看到null并不在唯一约束的判断范畴之中。

4、主键约束(primary key、pk)

主键约束 = 非空约束 + 唯一约束。也就是说设置为主键的字段列,不能够为空,不能够重复。想一般用户编号是不可能重复的,也不可能为为空的。

4.1 范例1:定义主键约束

范例1: 定义主键约束

-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
    mid     number       primary key,
    name    varchar2(20) not null	
);
或者
-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
    mid     number,
    name    varchar2(20) not null
	constraint pk_mid primary key(mid)	
);

第一种方式是直接在后边跟上primary key,但是这样会由系统自动生成一个约束名称,后边的维护是不方便的,所以使用建议第二种,创建约束,可以指定约束的名称
在这里插入图片描述

4.2 范例2:增加正确的数据

范例2: 增加正确的数据

insert into member(mid,name) values(1,'张三');

在这里插入图片描述

4.3 范例3:增加错误的数据

范例3: 增加错误的数据 – 将主键内容设置为null或者重复

insert into member(mid,name) values(null,'张三');
或者
insert into member(mid,name) values(1,'李四');

在这里插入图片描述
在这里插入图片描述
通过这两个错误信息就可以确定,主键就是两个约束的集合体。在99%的情况下一张表只能够定义一个主键信息,当然从SQL语法的角度来讲是允许定义多个列为主键,这样的操作往往称为复合主键。如果是复合主键则表示若干个列的内容完全重复的时候才称为违反约束

4.4 范例4:使用复合主键

范例3: 使用复合主键

-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
    mid     number,
    name    varchar2(20) not null,
	constraint pk_mid primary key(mid,name)	
);

此时,将mid与name两个字段同时定义为了主键,所以当两个字段完全重复时才表示违反约束
在这里插入图片描述

4.5 范例5:增加正确的数据

范例3: 增加正确的数据

insert into member(mid,name) values(1,'张三');
或者
insert into member(mid,name) values(1,'李四');
或者
insert into member(mid,name) values(2,'李四');

在这里插入图片描述

4.6 范例6:增加错误的数据

范例3: 增加错误的数据
在上面的基础上在次添加第一个条

insert into member(mid,name) values(1,'李四');

在这里插入图片描述
以上了解就好,因为数据库设计的第一原则:不要使用复合主键。即:一张表就一个主键。


下一篇👉Oracle-----检查约束&外键约束&修改约束

本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值