MySQL-表的约束(上)

发布于:2025-09-05 ⋅ 阅读:(25) ⋅ 点赞:(0)

表的约束

        在 MySQL 中,表的约束(Constraints)用于确保数据库中数据的完整性和一致性。它们定义了对表中数据的规则和限制,防止无效或不一致的数据被插入、更新或删除。常见的 MySQL 表约束包括主键约束(PRIMARY KEY)外键约束(FOREIGN KEY)唯一约束(UNIQUE)非空约束(NOT NULL)检查约束(CHECK)默认约束(DEFAULT)自增约束(AUTO_INCREMENT)等,这些约束可以在创建表时定义,也可以使用 ALTER TABLE 语句在已存在的表上添加或修改。合理使用约束可以大大提高数据库中数据的质量和可靠性。

        但事实上真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合 法性,从业务逻辑角度保证数据的正确性。 表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key

空属性

        在 MySQL 中,空属性(NULL/NOT NULL) 是最基础也最常用的表约束之一,用于控制列是否允许存储 NULL 值(表示 "无值" 或 "未知值")。

  • NULL:表示列允许存储空值(默认行为)
  • NOT NULL:强制列必须存储具体值,不允许为空

注意:数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办 法参与运算。

如图所示

案例:

        创建一个班级表,包含班级名和班级所在的教室。

        站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 。

        所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这 就是“约束”



如图所示

        我们创建一个名为“myclass”的表来测试一下。

        然后,查看一下表的数据结构

        可以看到,我们在创建数据表的时候,定义了字段“class-name”和“class-room”not null,以及字段“other” null然后我们来测试一下这两个字段是否允许 null

        插入几组数据来做测试。

        通过测试可以发现字段“other”是允许为 null 的,而字段“class-name”和“class-room”是不允许为 null 的



默认值

        在 MySQL 中,默认值约束(DEFAULT) 用于为表中的列指定一个默认值。当向表中插入数据时,如果没有为该列提供具体值,MySQL 会自动使用默认值填充。



        我们创建一个名为“t13”的表来测试一下。

        查看一下表的数据结构

        插入几组数据来测试一下。

       查看一下插入的数据。

       我们这时插入数据是正常插入的。

       假设我们只插入name这一列。

        可以看出,这时其余两项是默认插入的,并不是用户主动插入的

        我们创建一个表再来看一下。

        查看一下这张表的数据结构。

   我们可以看到Default列是默认值。如果插入数据时没有指定该列的值,会使用默认值。name 的默认值是 NULL,但由于 name 不允许为 NULL,所以插入时必须显式指定 name 的值。age 的默认值是 18gender 的默认值是 男。

        我们不妨忽略gender和age试试。

        可以看出,我们所忽略的值都是被默认插入了。



注意:

  1. 与 NOT NULL 结合:默认值通常与 NOT NULL 一起使用,确保列既有默认值又不允许为空

    sql

  2. 函数作为默认值:MySQL 支持使用某些函数作为默认值。

  3. 插入时覆盖默认值:如果插入数据时指定了具体值,将覆盖默认值

列描述

        在 MySQL 中,“列描述” 并不是一种约束,而是用于对表中的列进行说明、注释,方便其他开发者或自己后续了解列的含义等信息。可以通过 COMMENT 关键字来为列添加描述信息。



        这部分我们就来简单了解一下。

        创建一个表来进行测试并查看一下表结构。

        插入几组数据。

        解释一下,列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。



zerofill

        在 MySQL 中ZEROFILL 是一种针对数值类型列的特殊约束(更准确地说是一种格式属性),用于在数值的显示长度不足时,自动在前面补零(0)。

  • 仅影响数值的显示形式,不改变数据的实际存储值
  • 自动为列隐式添加 UNSIGNED 属性(无符号,即只能存储非负数值)


如图所示

        创建一个表,并查看一下它的表结构。

         可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个 属性,括号内的数字是毫无意义的。

        现在我们来插入几组数据。

        接着修改一下它的数据结构。

        但是对列添加了zerofill属性后,显示的结果就有所不同了。

        这次可以看到b的值由原来的2变成00002,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是10),自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。为什 么是这样呢?我们可以用hex函数来证明。


网站公告

今日签到

点亮在社区的每一天
去签到