【MySQL】表的约束

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】表的约束

思维导图

学习目标

      这篇博客主要学习一下表的约束,将表的约束的语句进行熟练掌握!!!!

      真正约束字段的是数据类型,但是约束条件太单一了,表中一定要有各种约束,通过约束,让我们未来插入数据库表的数据是符合预期的,约束本质是通过技术手段倒逼程序员插入正确的数据。反过来,站在MySQL的视角,凡是插入进来的数据都是符合数据约束条件的!

      约束的最终目标是:保证数据的完整性和可预期性!!!

一、空属性(null和not null约束)

      空属性中有两个值:null(默认的)和 not null(不为空)。数据路默认字段基本都是字段为空,但是实际开发的过程中,尽可能保证数据不为空,因为数据为空无法进行过运算。如下图所示:

      举个例子:创建一个班级表,包含班级和班级所在的教室,站在正常的业务逻辑中:如果班级没有名字,你不知道你在哪一个班级中;如果教室名字可以为空,就不知道在哪里进行上课。

      如果在插入数据时,由于表进行了约束,不满足条件的数据不会插入进去,这就是约束!!!

二、默认值(default约束)

2.1 默认值的概念

      默认值的概念:某一种数据会经常性的出现在某一个具体的值,可以在一开始就指定好,在需要真实数据的时候由用户选择性的使用默认值。

2.2 default的用法

      defalut:数据在插入时不给该字段进行赋值, 就使用默认值。如果我们没有明确指定一列要插入,如果在建表中,对应列的默认值没有设置default值,无法直接进行插入。

2.3 default 和 not null 进行相互补充

      当我们只对设有not null的字段没有进行插入数据,那么mysql会发送default错误提示。一个字段如果被default约束,我们也可以进行插入NULL,但是如果被not null进行约束,我们不可以插入NULL。

      如果,我们在建立一个表的时候,没有建立所谓默认值,那么mysql会进行优化,默认带上default null。

三、列描述(comment)

3.1 comment的概念

      概念:没有实际的含义,专门用于描述字段,互根据表创建语句保存,用来给程序员或者DBA进行了解每一个字段的含义。

3.2 comment的作用

相当于注释,但是通过desc命令查看不到任何注释信息,但是我们可以使用show来进行查看:

四、zerofill

4.1 解释int类型的后面的长度大小

      在刚开始学习mysql时,很多人对数字类型后面的长度很迷茫,比如int类型是4个字节,但是在mysql中默认为10。因为int的字节数是4个字节所表示的数字的最大数是:21亿多,刚好数字的长度为10,所以int后面的数字为10;同理,有符号的int的长度为11,包含一个符号位。

4.2 comment的作用

      显示方面的约束,当数字的位数小于所显示的位数,则用0去填充;如果数字的位数打掩护所显示的位数,则不用填充,也不需要进行比特位切割,主要做格式化显示。

4.3 zerofill的一些现象

在使用zerofill的前后,数据显示的对比:

zerofill只是一种显示格式,其中所能存储的数据的范围与后面的长度大小没有关系:

数据并没有进行改变:

五、主键

5.1 主键的概念

      primary key用来唯一的约束该字段的数据,不能进行重复,不能为空,一张表中最多只能有一个主键。主键的列一般都是整数类型,比如:id,person_id……

5.2 主键约束

      主键对应的字段不能重复,一旦重复,操作失败,不能进行插入。

5.3 主键的追加

alter table 表名 add primary key(字段列表);

5.4 主键的删除

alter table 表名 drop primary key; // 因为一张表中只有一个主键,所以直接删除即可

5.5 复合主键

      在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,则可以使用复合主键。

六、自增长(auto_increment)

      当对应的字段不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 + 1操作,得到一个新的不同的值,通常和主键搭配使用,作为逻辑主键。很像之前在C语言阶段学习的联合体。

6.1 自增长的特点

  1. 任何一个字段要做自增长,前提是本身是一个索引(key一栏必须是整数)
  2. 自增长字段必须是整数
  3. 一张表最多只能有一个自增长

6.2 索引

      在关系型数据库中,索引是一种单独的,物理的对数据库表中一列或者多列的值进行排序的一种存储结构,它是某个表中一列或者若干列值的集合和相应的指向表中物理表示这些值的数据的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

      索引提供指向存储在表的指定列中的数据值的指针,然后根据你指针的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺着找到包含该值的行。这样可以使对应表中的SQL语句执行的更快,可快速访问数据库表中的特定信息。

七、唯一键(unique)

      一张表中有往往很多的字段需要唯一性,数据不能进行过重复,但是一张表中只能有一个主键,唯一键就可以解决表中有多个字段需要唯一性约束的问题。

      唯一键的本质与主键差不多,唯一键允许为空,而且允许多个为空,空字段不做唯一性比较。主键不能为空。

唯一键与主键的区别:

  • 主键更多的是表示唯一性
  • 唯一键更多的是保证业务,不要和别的信息出现重复

八、外键

8.1 外键的概念

      外键用于定义主表和从表之间的关系:外键约束定义在从表中,主表则必须是有主键约束或者unique约束

8.2 外键的语法

foreign key (字段名) references 主表(列)

8.3 如何理解外键约束

      这个世界的数据大多是具有相关性

      此时,在实际使用的时候,可能会出现什么问题?有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?比如比特只开了100班,101班,但是在上课的学生里面竟然有102班的学生(这个班目前并不存在),这很明显是有问题的。

      解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
5月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
1月前
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
36 4
|
2月前
|
SQL 关系型数据库 MySQL
MySQL中外键的使用及外键约束策略
这篇文章讨论了MySQL中使用外键的重要性,包括外键的概念、不使用外键可能导致的问题、如何设置外键约束以及不同的外键约束策略(如CASCADE和SET NULL),并通过示例演示了这些概念。
MySQL中外键的使用及外键约束策略
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库基础:约束
约束是对数据库表中字段施加的规则,确保数据的正确性、有效性和完整性。主要分为非空约束、唯一约束、默认约束、主键约束和外键约束。非空约束禁止字段值为null;唯一约束确保字段值唯一,允许null值重复;默认约束设定默认值;主键约束结合非空与唯一约束,并可设为自增型;外键约束则通过关联其他表的主键,保证数据一致性。检查约束确保字段值满足特定条件。
48 1
|
3月前
|
数据采集 关系型数据库 MySQL
在 MySQL 中使用约束
【8月更文挑战第11天】
60 0
在 MySQL 中使用约束
|
5月前
|
SQL 关系型数据库 MySQL
MySQL----约束
MySQL----约束
35 1
|
4月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
4月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
4月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。