约束---

本文详细介绍了SQL中用于确保数据完整性的约束类型,包括非空约束、唯一性约束、主键约束、外键约束、检查约束和默认值约束。非空约束确保字段不为空,唯一性约束保证字段值的唯一,主键约束结合了非空和唯一性,外键约束维护了表间的关系。此外,还讨论了如何在创建和修改表时添加、删除这些约束,并强调了主键约束与自增列的使用规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么需要约束?
数据完整性是指数据的精确性和可靠性。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑:
在这里插入图片描述
什么是约束?
约束是表级的强制规定。
可以在创建表时添加约束(通过create table 语句),或者在表创建之后通过alter table语句添加或删除约束。

约束的分类

#角度一:约束的字段个数
#单列约束vs多列约束

#角度二:约束的作用范围
#列级约束:将此约束声明在对应字段的后面
#表级约束:在表中所有字段都声明完后声明的约束

#角度三:约束的作用(或功能)
#1.not null (非空约束)
#2.unique (唯一性约束)
#3.primary key (主键约束)
#4.foreign key (外键约束)
#5.check (检查约束)
#6.default (默认值约束)

非空约束

关键字not null
特点:
在这里插入图片描述
例:

create table t(
id int not null,
name varchar(15) not null,
email varchar(25)
);

在alter table时删除约束

alter table t
modify id int null;

唯一性约束

用来限制某个字段/某列的值不能重复
关键字:unique
特点:
在这里插入图片描述

create table t1(
id int unique,#列级约束
name varchar(15),
email varchar(25) unique #列级约束
);

#表级约束
constraint uk_t1_id unique(id) #uk_t1_id为自定义约束名
#若不给约束命名,则默认和列名相同
unique(id)

删除约束时要用到约束名。
可以向声明unique的字段上添加null值,且可添加多个null值。

在alter table中添加约束

#方式一:
alter table t1
add constraint uk_t1_sal unique(salary);
#方式二:
alter table t1
modify name varchar(25) unique;

复合的唯一性约束

create table user(
id int,
name varchar(25),
password varchar(15),
#表级约束
constraint uk_user_name_pwd unique(name,password)
);

在这里插入图片描述
只要name和password不同时相同,则可以添加进去。

删除唯一性约束
在这里插入图片描述

#drop index 约束名
alter table t1
drop index uk_user_name_pwd;

primary key主键约束

用来唯一标识表中的一行记录。
关键字primary key
特点:主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在alter table中添加主键约束

alter table t
add primary key(id);

删除主键约束(实际开发中,不会删除表中的主键约束!)

alter table t
drop primary key;

自增列auto_increment

作用:某个字段的值自增
关键字:auto_increment
特点:
在这里插入图片描述
在这里插入图片描述
在alter table时添加自增列(不常用)

alter table t
modify id int auto_increment;

在alter table中删除自增列

alter table t
modify id int;

注意
开发中,一旦主键作用的字段上声明了auto_increment,则我们添加数据时不要给主键字段赋值了,赋值也没用。因为主键字段会自动从0开始每次+1。

foreign key外键约束

作用:限定表的某个字段的应用完整性。关键字:foreign key

例:要求从表中添加的department_id在主表中能找到,否则添加失败。
在这里插入图片描述
主表(父表):被引用的表,被参考的表。
从表(子表):引用别人的表,参考别人的表。
在这里插入图片描述
特点:
在这里插入图片描述
示例:
在这里插入图片描述
修改:给主表的dept_id加上主键约束

alter table dept1
add primary key(dept1_id);

删除外键约束
一个表中可以声明有多个外键约束。
在这里插入图片描述

约束等级

在这里插入图片描述
在这里插入图片描述
开发场景
在这里插入图片描述

check约束

作用:检查某个字段的值是否符合xx要求,一般指的是值的范围。
关键字:check
MySQL5.7不支持,可以使用check约束,但对数据验证没有任何作用。添加数据时没有任何错误和警告。但MySQL8.0中支持。

在这里插入图片描述

default约束

默认值约束。关键字:default
作用:给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。

create table t(
id int default 2000
);

表示:若没给id赋值,则默认值为2000。

在alter table中添加default约束

alter table t1
modify id int default 200;

面试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值