【MySQL】数据库的约束

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 数据库的约束是关系型数据库的一个重要的功能,因此约束可以规定表中的数据规则,从而确保数据的正确性。

1. 前言


数据库的约束是关系型数据库的一个重要的功能,因此约束可以规定表中的数据规则,从而确保数据的正确性.


2. 非空约束(NOT NULL)


非空约束(NOT NULL): 指示某列不能存储 NULL 值.

如果可以为null,就可以理解选填项,不允许为null,就是必填项.

如果不加约束,创建一张表.它的值是可以为null的.

例如:

111.png

使用desc查看student这张表,可以看到有一列是null,它的值是YES,这就代表它的值可以为null.

112.png

可以新增值为null的数据.

如果id必须填,但是名字可以不填,就需要在创建数据库表时使用非空约束

113.png

使用not null 之后,我们可以看到这里id的null列的值为NO,代表了此处的值不允许为null

此时如果再去新增一个id值为null的数据的话,就会报错.但是

114.png


3. 唯一约束(UNIQUE)


唯一约束(UNIQUE): 保证某列的每行必须有唯一的值

例如学生表中的学生id不能重复,就可以使用UNIQUE来进行约束

115.png

使用desc查看表的结构,可以看到Key这一列,id有一个UNI,就是UNIQUE的前三个字母.

116.png

此时如果新增两个id一样的数据就会报错,使用唯一约束新增数据时,会先去查询数据,没有重复的数据才会进行新增


4. 主键约束(PRIMARY KEY)


主键约束PRIMARY KEY: NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

约束是可以组合使用的,如果一个学生的id即不能为null,也不能重复,就可以使用非空约束加上唯一约束

117.png

但是使用desc 查看表结构时,我们可以看到这里的Key并不是UNI,而是PRI(PRIMARY KEY).

主键约束其实就是非空约束和唯一约束的结合

118.png

使用非空约束加上唯一约束其实和直接设置主键约束是一样的

使用主键约束和唯一约束时,都会先去查询数据,因此MySQL会自动去给主键约束和唯一约束添加索引,从而提高查询的效率

在MySQL中,主键只能有一个!

119.png

虽然MySQL中只能有一个主键,但是MySQL允许把多个列合并在一起,使用同一个主键,这种成为联合主键

主键还有一个常用的用法,使用MySQL自带的"自增主键"作为主键的值,需要在primary key的后面添加auto_increment

120.png

121.png

此时使用desc 查看表结构时,可以看到id在Extra处的值时auto_increment

使用自增主键之后,在插入id的时候,可以指定id,也可以不指定(null),不指定时MySQL就会自动生成

122.png

此处的id 就是由MySQL自动生成的

1234.png

再次插入一条数据时,第二个id是2. 因此MySQL会在上一条数据的id基础上+1.

刚才说了使用自增主键时可以指定,也可以不指定,下面就是指定的效果

125.png

那么此时要在新增一条数据,但是不指定id,新增的id是什么呢?

实践出真知

126.png

可以看到新增的这条数据的id是11.

MySQL的自增主键,会根据最大值进行新增.


5. 默认值约束(DEFAULT)


默认值约束(DEFAULT): 规定没有给列赋值时的默认值

新增数据时,可以指定列新增数据,那么没有被赋值的数据,就会以默认值的进行填充

127.png

上面是我创建的一个"student"表,设置name的默认值为"未命名".

接下来新增两条数据

128.png

第一次新增的数据是一条完整的数据,但是第二条数据,只对id进行了赋值

1289.png

通过查询我们可以看到第二条的数据的name变成了 未命名,给未赋值的列指定默认值.这就是默认值约束的用法


6. 外键约束(FOREIGN KEY)


外键约束(FOREIGN KEY): 保证一个表中的数据匹配另一个表中的值的参照完整性

外键约束是两个表之间相互约束,可以将两张表关联起来.

举个例子: 我要创建两张表,一个是学生信息表,学生信息表中有 学号,学生姓名和学生班级编号 这三个信息.另外一个是班级信息表,班级信息表中有 班级编号,班级的名字这两个信息.

而此时要将学生信息表中的班级编号和班级信息表中的班级编号连接起来,就可以使用外键约束.

创建班级信息表:

130.png

创建学生信息表,同时将 学生信息表中的classId 与 班级信息表中的 id建立连接.

131.png

注意: 设置外键时,外键所参照的键必须为被参照表的主键(primary key)或者是唯一(unique).

建立约束之后,班级信息表中的 班级编号就对学生信息表中的数据产生了约束. 学生的班级编号必须在班级信息表的班级编号中.因此外键约束下,插入数据也会有查询操作.

约束表(此处是班级信息表) 也被称为 “父表”

被约束表(此处是学生信息表) 也被称为 “子表”

虽然父表会对子表产生约束,但是子表也会对父表产生影响.

如果直接删除父表,就会报错.

例如:

132.png

此处并没有删除成功,如果要删除,要先删除子表.

删除或者修改父表中的数据,也要看这条数据是否被子表所引用.

补充: 有时需要把父表删除,但是直接删又删不掉,所以这里可以采用"逻辑删除",可以设置一个变量,让它的取值为0/1,0就是无效数据(逻辑上删除),1是有效数据.只需要改变这个变量的值即可


7.检查约束(CHECK)


检查约束(CHECK) : 保证列中的值符合指定的条件,对于MySQL数据库,对CHECK进行分析,但是忽略CHECK的子句

举个例子: 性别这里一般都是男和女这两个选项,就可以使用检查约束对性别进行约束.在新增数据时,就会对当前新增的数据进行判断,看当前数据是否满足条件.

不过检查约束在MySQL5中并不支持,写了不会报错,但也不会执行.所以不做过多介绍了.


8. 总结


约束在数据库中还是很重要的,再说一下主键常用的方法在主键可以使用MySQL自带的"自增主键"作为主键的值,需要在primary key的后面添加auto_increment,外键要搞清楚那个是父表,那个是子表.设置外键时,外键所参照的键必须为被参照表的主键(primary key)或者是唯一(unique).

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
1月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
1月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
1月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
1月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
1月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
82 3
|
1月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
1月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
300 7
|
1月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
141 6

热门文章

最新文章

推荐镜像

更多