[MySQL] MySQL表的约束

这篇具有很好参考价值的文章主要介绍了[MySQL] MySQL表的约束。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  在前面的文章中提到了约束,是通过数据类型对字段产生的约束。但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。于是就引入了表的约束。

  表的约束很多,这里主要介绍如下几个:null/not null、default、comment、zerofill、primary key、auto_increment、unique key、foreign key。

文章目录

一、空属性

二、默认值

三、列描述

四、zerofill

五、主键

六、自增长

七、唯一键

八、外键

九、综合练习


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:MySQL 👀

💥 标题:MySQL表的约束💥

 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

一、空属性

  在MySQL中,空属性约束指定了某一列是否可以包含NULL值。它们用于各种目的,例如数据验证和限制数据的输入格式。以下是空属性约束的详细解释:

  1. NOT NULL: 当使用NOT NULL属性约束时,将禁止该列包含NULL值。这意味着在插入或更新数据时,该列必须包含有效的数值或字符,不能为NULL。
  2. NULL: 如果没有显式地指定NULL或NOT NULL属性约束,那么默认情况下,列可以包含NULL值。这意味着在插入或更新数据时,如果没有提供有效的值,可以将该列的值设置为NULL。

  我们再通过具体的实例来理解一下空属性的使用和其意义。具体如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  如上图所示,我们把id 和 name 均设置了 not null(不为空)。其中并没有对high设置,默认就是可以为空的。我们再插入数据进行查看,如下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  从上图中可以看到,当对字段设置了不能为空时,插入的时候就不能再插入NULL值。当可以为空时,插入NULL值和其对应的类型的值均为可以的。

  在实际应用开发中,比如我们在插入数据并不能准确的知道数据的值,就可以暂时插入NULL值。当设置了不能为空时,这就约束着必须插入有效的值

  通过合理地应用空属性约束,可以有效地避免数据中的空值或缺失值,从而提高数据质量和可靠性。

二、默认值

  在MySQL中,默认值约束用于定义表列的默认值。当插入新记录时,如果没有为该列提供值,则可以使用默认值来填充该列。这有助于减少数据冗余并提高数据库的一致性。

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

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  在上图中我们将性别默认设置成 ‘女’。当插入数据时不提插入性别时,默认就是 ‘女’。具体如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  通过上图看到,当我们不再插入性别时默认给我们填充了‘女’,当然也可以自己指定。我们也可查看表结构,看其详细的默认值,如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  当我们不指定其默认值时,默认给我们指定了默认值为NULL。我们再看如下的插入:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  有同学就会有疑问:我们假如设置一个字段不为空时,默认值还会自动设置为NULL吗?我们不妨通过下图看一下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库  那么 default约束 和 空属性约束 是不是冲突的呢?当我们设置了default时,这就意味着即使我们不插入数据也不为空,因为会默认使用默认值填充。default约束和not null约束同时出现并没有太大的意义。因为一但设置的default约束,就可以保证了 not null 约束。但是我们要区分的是:

  • default 是我们不显示的向指定列插入,default会自动插入。
  • NULL 是显示的向一列插入。如果插入正常值,就正常工作。如果不确定就插入NULL。但是有not null约束时,就必须插入有效值。

  其实他们之前也并不冲突,反而是相辅相成的。当我们不指定插入时,可以用到default约束。指定插入就可以选择空约束。

三、列描述

  所谓列描述,就是我们之前一直在使用的对列的注释信息。用到的关键词是comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了

解。下面我们再来看一个实际例子:
[MySQL] MySQL表的约束,MySQL,mysql,数据库
  desc查看表结构时并不能看到注释信息,如下:
[MySQL] MySQL表的约束,MySQL,mysql,数据库
  可以通过show来查看建表时的注释信息,如下图:
[MySQL] MySQL表的约束,MySQL,mysql,数据库

四、zerofill

  在MySQL中,zerofill约束是一种用于数值字段的约束,它会在数值字段的值前面添加零,使其达到指定的长度。这通常用于保持数值字段的位数一致性,尤其对于需要显示位数对齐的情况非常有用。

  当你在MySQL中创建一个数值字段,并为其添加zerofill约束时,MySQL会自动在存储数据时将数值填充为指定长度,并在需要的情况下,自动在数值前面添加零。

  我们一直没有解释int(11)中的11的含义是什么,如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  其实就是代表的整型的位数,表示的是11位。int的取值范围是大约是21亿正负,最多也就是十位数字,负数的话再加上符号相当于11位了。那么无符号整数是不是10位就可以了呢?是的。如下图所示:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  我们也可以通过zerofill约束来验证一下。我们现在将 id 的字段属性修改一下,增加上zerofill约束。如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  我们再来插入一条数据,观察是否会自动补0:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  如上图所示,正是我们所说的那样,不够位数时会自动在前面补0。因为时无符号的整数,所以一共是10位。

五、主键

  在MySQL中,主键约束用于唯一标识表中的每一行数据。怎么理解这句话呢?通俗来讲,一个事物可能会有很多的字段属性,其中某一个属性或者多个属性组合能够唯一标示该事物,我们可以将该字段设置成主键类型。

  举个例子,一个合法的中国公民,都会有自己的身份证,每个人的身份证号是不同的,且身份证号能够唯一的标示某个人,那么身份证号就可以设置成主键类型。下面我们通过一个实际例子来看:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  上图的例子中,我们设置学生的学号为主键(primary key),用来唯一标示一个学生的信息。注意:主键对应的字段的值不能重复,不能为空,一张表中最多只能有一个主键,且主键所在的列通常是整数类型。下面我们来插入一些数据来验证一下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  上图验证的主键对应的字段的值不能重复。一但重复,就会报错不让你进行操作。再看如下图,主键对应的字段的值也不能为NULL

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  当我们不想要这个主键时,直接将其删除掉即可。如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  我们也不用指定删除那个字段的主键,因为一张表中只允许有一个主键。当表创建好以后但是没有主键的时候,可以再次追加主键。如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  有时候一个字段并不能很好的标示数据的唯一性,但是多个字段就可以。我们也称之为复合主键。复合主键就是在创建表的时候,在所有字段之后,使用多个字段作为主键。具体实例如下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  如上图,我们将 id 和 course 同时构成主键,他们即为复合主键。我们在查看表结构时,可以看到 id 和 course 的Key列都有PRI标志,并不是说明有两个主键,而是他们两个组成了复合主键。并且它们都是不允许为空的。我们来插入一些数据来观察一下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  通过上图也不难发现,只有当与复合主键中所有的字段的值相同时,才算冲突,并且不会让你进行插入。复合主键也是主键,所以对主键的操作也可以用到复合主键上。

六、自增长

  在MySQL中,自增长约束是一种非常常见的约束,用于在插入数据时自动为表中的主键字段生成唯一的递增值。这种约束通常用于确保表中的每一行都具有唯一标识,并且可以方便地避免手动指定主键值的繁琐操作。

  自增长约束通常与主键字段一起使用,通过自动分配唯一的、递增的整数值来确保每行数据都有一个独特的标识符。下面我们来看一个实际的例子:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  我们下面再来插入一些值来观察一下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  我们再插入时并没有设置id的值,但是在创建表的时候添加了自增长的约束。所以我们看到默认值是从1开始,然后加1增长。那要是我们自动为id添加了一个值,那么以后是怎么进行增长的呢?具体如下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  如上图,当我们不再指定id的值时,是从2开始增加呢,还是1001开始增加呢?我们看如下实例:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  答案是从当前字段中已有的最大值进行加一。怎么做到的呢?如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  实际上数据库一直在为我们维护者下一个的自增长的值是多少。所以我们用户可以不再去担心这个问题。重点是自增长约束通常用于创建主键列,以确保数据的唯一性和完整性。它适用于需要唯一标识每个记录的场景,例如用户ID、订单ID等。

七、唯一键

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

  MySQL中的唯一键约束是用于确保表中某一列(或多列的组合)的数值在整个列中是唯一的。唯一键约束通过在表中创建唯一索引来实现,其主要作用是防止用户插入重复的数据,确保数据的一致性和完整性。

  怎么感觉跟主键好像啊。确实他们有很多相似之处,但是也有不同之处。下面我们通过实际例子来观察一下。如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  我们知道每个人的电话号码是不能重复的,所以将telephone字段设置了unique约束。我们再来插入一些数据观察一下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  通过上图,我们也能发现某个字段具有唯一性约束时,该字段也可以为NULL。但是主键的值是不能为NULL的。其次,一但插入重复的值,就会报错。同时,一张表中可以设置对个唯一键,但是一张表中只能有一个主键。

  唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。关于唯一键和主键的区别: 我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。下面结合例子理解一下:

  假设一个场景 ( 当然,具体可能并不是这样,仅仅为了帮助大家理解 ) 。比如在公司,我们需要一个员工管理系统,系统中有一个员工表,员工表中有两列信息,一个身份证号码,一个是员工工号, 我们可以选择身份号码作为主键。
  而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键。 一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整。
   需要注意的是,不是主键具有唯一性,而是某个具有唯一性的字段被选择成为了主键,而那些不是主键但是同样需要唯一性约束的字段就应该设置成唯一键

  当然,我们也可以对唯一键进行删除和增加,这里就不再做过多解释,我们直接看实例:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

八、外键

  外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。下面我们举一个例子。

  一个学生一定隶属于一个班级。一个班级会有很多学生。所以当我们在定义学生表时,班级的信息一定会有大量的重复。如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  从上图可知,会有很多学生都会记录上相同的class_id 与 class_name。这时候我们可以单独创建一个班级表,让班级表与学生表产生一定的联系即可。如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  但是我们需要在student表中保留一个class的属性,这样才能与myclass表建立联系。具体如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  在上图中,我们把student表中的class_id设置成了外键。class_id在myclass表中是主键。那么这个时候主表就是myclass表,从表是student表。主表会对从表产生一些约束的,也就是对带有外键约束的列进行约束。主表中的数据如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  下面我们来对从表插入一些数据看一下:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  上图中从表中的class_id是具有外键约束的。这时向student表中插入数据时,如果插入的数据对应的class_id是myclass表中存在的,或者插入的class_id为null,那么此时是允许进行插入的。那要是插入的class_id不是myclass表中存在的呢?我们在看如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  当插入的class_id不是myclass表中存在的,那么就会插入失败。通俗理解:当试图插入或更新数据时,MySQL会检查引用的主键列是否存在有效值。如果没有有效的主键值,则无法插入或更新数据。

  所以在对外表进行插入数据时,所具有外键约束的字段,插入的数据必须在主表中存在。否则就会插入失败。我们还需要注意的是:外键列的值必须是唯一的,不能有重复值。这样我们上述所举的例子并不是很好,这里能够理解就行。

九、综合练习

  有一个商店的数据,记录客户及购物情况,有以下三个表组成:

  • 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商provider);
  • 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id);
  • 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)。
  要求:
  • 每个表的主外键;
  • 客户的姓名不能为空值;
  • 邮箱不能重复。

  goods表如下图: 

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  customer表如下图: 

[MySQL] MySQL表的约束,MySQL,mysql,数据库

  purchase表如下图:

[MySQL] MySQL表的约束,MySQL,mysql,数据库[MySQL] MySQL表的约束,MySQL,mysql,数据库

  当创建完毕后,我们可自行的插入一些数据进行验证和练习。本篇文章的讲解就到这里,感谢阅读ovo~文章来源地址https://www.toymoban.com/news/detail-753410.html

到了这里,关于[MySQL] MySQL表的约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】数据库的约束

    哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据库中对表的约束, 主要有null (空约束),unique(唯一约束),primary key(主键约束),default(默认值约束), forelgn key(外键约束),check(检查约束),超多实例讲解,通俗易懂。 更多相关知识敬请期待:保护小周ღ *★,°*:

    2023年04月09日
    浏览(57)
  • MySQL:数据库的约束

    目录 1.数据库约束 1.1 非空:not null 1.2 唯一:unique         ​​​​​​​ 1.3 默认值:default 1.4 列描述:comment 1.5 主键约束:primary key 1.6 外键约束 1.7 综合案例 2.插入查询结果 3.聚合函数 4.group by(分组查询) 关系型数据库的一个重要功能,就是需要保证数据的完整性

    2024年02月05日
    浏览(91)
  • MySQL数据库 12:约束

    在MySQL中, 约束是一种限制数据表中列值的规定 。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种: 1. 主键约束(Primary Key Constraint) :主键是用于唯一标识表中每行记录的列。主键约束要求 每个主键列的值都是唯一的,且不能为NULL 。一个表只能有一

    2024年02月08日
    浏览(50)
  • 【MySQL数据库 | 第十二篇】:约束

    在MySQL中, 约束是一种限制数据表中列值的规定 。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种: 1. 主键约束(Primary Key Constraint) :主键是用于唯一标识表中每行记录的列。主键约束要求 每个主键列的值都是唯一的,且不能为NULL 。一个表只能有一

    2024年02月08日
    浏览(51)
  • MySQL数据库:数据库的约束以及数据的聚合、联合查询

    目录 一.关系模型的简要概述 二.数据库的约束  2.1约束类型         2.2NULL约束 2.3 UNIQUE:唯一约束 2.4 默认约束 2.5 PRIMARY KEY:主键约束 2.6 FOREIGN KEY:外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 3.2.1聚合函数 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.联合查询

    2024年02月10日
    浏览(67)
  • MySQL数据库基础(九):SQL约束

    文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束(了解) 六、总结 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 遵循原

    2024年02月19日
    浏览(60)
  • 【数据库】MySQL数据约束和表关系详解

    目录 1.数据库约束 1.1约束类型 1.2NULL约束 1.3UNIQUE:唯一约束 1.4DEFAULT:默认值约束 1.5PRIMARY:主键约束 1.6FOREIGH KEY:外键约束 2.表的关系 2.1一对一 2.2一对多 2.3多对多 数据库中的数据保存在数据表中,在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候

    2024年02月04日
    浏览(49)
  • 【MySQL】一文带你了解数据库约束

    作用: 数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。 常见的数据库约束包括: 主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。 外键约束:用于确保表之间数据的

    2024年02月08日
    浏览(79)
  • MySQL数据库 - 表的操作

    目录 一、创建表 二、创建表案例 1、显示当前使用的数据库名 2、创建表  2.1 MyISAM存储引擎表 2.2 InnoDB存储引擎表 三、查看表结构  四、修改表 1、新增列   2、修改列类型 3、修改列名 4、修改表名  5、删除列   五、删除表 表的操作至少会涉及如下两类SQL语句: • DDL(

    2024年02月13日
    浏览(42)
  • MySQL的约束类型、数据库操作、数据表操作大全(简述)

    目录 一.数据库的操作语法 二.MySQL数据库约束 三.数据类型 四.数据表操作 作者简介:  tq02,一个想成为编程高手的梦中人 作者主页:  tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 学习专栏:  🎥  MySQL基础          🎥  JavaSE                🎥   C语言 本

    2024年02月12日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包