0
点赞
收藏
分享

微信扫一扫

从零开始学 MySQL -- 常见的五种约束条件


阅读本文大概需要 7 分钟

从零开始学 MySQL -- 常见的五种约束条件_mysql

前言

上篇文章我们学习了如何创建数据库以及在数据库中插入数据,今天的文章我们学习下 MySQL 的约束。

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。话不多说,一起来学习吧!

1、目录

今天学习的主要内容有

  • MySQL 约束分类
  • 主键约束
  • 默认值约束
  • 唯一约束
  • 外键约束
  • 非空约束

2、知识点

  • 约束分类以及约束条件的使用场景

3、约束分类

听名字就可以知道,约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性

比如说,规定一个用户的用户名不能为空值且没有重复的记录,这就是一种约束规则。

在 MySQL 中,通常有这几种约束:

从零开始学 MySQL -- 常见的五种约束条件_数据库_02

为了方便介绍这几种约束,先建立一个数据库。

需要提前输入命令开启 MySQL 服务并使用 root 用户登录:

#打开 MySQL 服务
sudo service mysql start
#使用 root 用户登录
mysql -u root

然后使用下面的命令,创建数据库及数据表:

CREATE DATABASE mysql_shiyan;
use mysql_shiyan;

从零开始学 MySQL -- 常见的五种约束条件_主键_03

从零开始学 MySQL -- 常见的五种约束条件_mysql_04

从零开始学 MySQL -- 常见的五种约束条件_mysql_05

其中包含的代码可以新建一个数据库 mysql_shiyan,然后在其中创建三张表 department,employee,project,它们包含了各种约束。

命令执行成功之后。

查看一下这个数据库,输入命令 show tables; 可见:

从零开始学 MySQL -- 常见的五种约束条件_数据库_06

3.1 主键约束

在数据库中,如果有两行记录数据完全一样,那么如何来区分呢?答案是无法区分,因为在数据库中,如果有两行记录完全相同,对于 MySQL 来说,就会认定它们是同一个实体,这跟咋们平常的生活感受是不一样的。

举个例子来说,假如我们要存储一个小学生的信息,信息包含姓名,身高,性别,年龄。这下巧了,有两个学生都叫小白,且他们的身高和年龄相同,数据库将无法区分这两个实体,那么怎么办?这时就需要用到主键了。

主键 (PRIMARY KEY) 是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要,主键不能有重复记录且不能为空。

比如我们这里,可以创建 employee 数据库,这里有主键:

从零开始学 MySQL -- 常见的五种约束条件_mysql_04

还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识,比如:

从零开始学 MySQL -- 常见的五种约束条件_mysql_05

为了方便介绍这几种约束,我们先建立一个数据库。

3.2 默认值约束

默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。

默认值常用于一些可有可无的字段,比如用户的签名等,如果用户没有设置,系统应该设定一个默认的文本,比如空文本或者“这个人太懒了,没有留下任何信息”之类的。

在之前创建的数据库命令中,这段代码就包含了 DEFAULT 约束:

people_num INT(10) DEFAULT 10,

DEFAULT 约束只会在使用 INSERT 语句时体现出来。

INSERT 语句中,如果被 DEFAULT 约束的位置没有值,那么这个位置将会被 DEFAULT 的值填充,比如语句:

# 正常插入数据
INSERT INTO department(dpt_name,people_num) VALUES('dpt1',11);
# 插入新的数据,people_num 为空,使用默认值
INSERT INTO department(dpt_name) VALUES('dpt2');

输入命令 SELECT * FROM department; 可见表中第二行的people_num 被 DEFAULT 的值 (10) 填充:

从零开始学 MySQL -- 常见的五种约束条件_主键_09

3.3 唯一值约束

唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。

在之前创建的数据库命令中,也有 UNIQUE 约束:

从零开始学 MySQL -- 常见的五种约束条件_mysql_10

当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE 约束,则 INSERT 失败,比如:

从零开始学 MySQL -- 常见的五种约束条件_数据库_11

当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE 约束,则 INSERT 失败,比如:

3.4 外键值约束

外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。

这句话是什么意思呢?比如,现在你管理者一个网站的后台数据库,数据库里面有用户表和文章表,如果给文章表中添加一个指向用户 id 的外键,表示这篇文章所属的用户 id。那么外键将确保这个外键指向的记录是存在的,如果你尝试删除一个用户,而这个用户还有文章存在于数据库中,那么操作将无法完成的并且会报错。

因为一旦删除了该用户过后,他发布的文章都没有所属用户了,而这样的情况是不被允许的。同理,你在创建一篇文章的时候也不能为它指定一个不存在的用户 id。

一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。

从零开始学 MySQL -- 常见的五种约束条件_mysql_12

并且注意,在 INSERT 时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列 (department 表的 dpt_name) 中没有 dpt3,则 INSERT 失败:

INSERT INTO employee VALUES(03,'xiaohong',12, 6000 ,123458,'dpt3');

将 dpt3 改为 dpt2(department 表中有 dpt2),则插入成功:

从零开始学 MySQL -- 常见的五种约束条件_数据库_13

3.5 非空约束

非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

从零开始学 MySQL -- 常见的五种约束条件_主键_14

在 MySQL 中违反非空约束,会报错,比如以下语句:

从零开始学 MySQL -- 常见的五种约束条件_主键_15

此时 employee 表的内容为:

从零开始学 MySQL -- 常见的五种约束条件_数据库_16

4、总结

本次的实验学习,我们通过一个数据库实例了解了主键、默认值、外键、非空、唯一这几种约束的特性,这几种约束在MySQL中都是最常见的,在使用MySQL过程中,结合具体的业务需求,需要仔细理解每种约束的含义及使用场景,加深印象和理解。

今天的学习就到这里啦。

如果大家在阅读的过程中,有什么建议和看法,非常欢迎在下方留言,每个留言我都会认真看的

从零开始学 MySQL -- 常见的五种约束条件_主键_17

从零开始学 MySQL -- 常见的五种约束条件_mysql_18

举报

相关推荐

0 条评论