MySQL表的约束(上)

发布于:2025-05-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

一、空属性(NULL/NOT NULL)

二、默认值(DEFAULT)

三、列描述(COMMENT)

四、Zerofill

五、主键(PRIMARY KEY)

总结


一、空属性(NULL/NOT NULL)

        默认情况下,字段允许为 NULL。但实际开发中应尽量使用 NOT NULL,避免数据参与运算时产生问题(如 NULL + 1 = NULL)。

若字段不允许为空,插入数据时必须提供值,否则会触发错误。

以下以 “员工信息表” 为例进行说明:

🌴创建 “员工信息表”

在这里,name(员工姓名)和 department(部门)字段设置了 NOT NULL 属性,即它们不允许为空。这意味着在向员工信息表插入新员工记录时,必须提供员工姓名和部门的信息,否则插入操作将失败。

🌴查看表结构

可以看到,name department 字段的 Null 列显示为 NO,表示它们不允许为空。

🌴插入记录

假设要插入一条新员工记录,例如,员工 ID 为 1,姓名为 “张三”,部门为 “销售部”,职位为 “销售经理”。可以使用以下 SQL 语句:

这条语句能够插入成功,因为 namedepartment字段都提供了非空值。

但如果尝试插入一条记录,例如,员工 ID 为 2,姓名为空,部门为 “技术部”,职位为 “软件工程师”:

这条语句将会失败,因为 name 字段被设置为 NOT NULL,而插入的值为空。

同样地,如果尝试插入一条记录,员工 ID 为 3,姓名为 “李四”,部门为空,职位为 “产品经理”:

这条语句也会失败,因为 depart字段被设置为 NOT NULL,而插入的值为空。

综上所述,在创建表时给字段设置 NOT NULL 属性,可以确保在插入数据时这些字段必须提供非空值,从而保证数据的完整性和一致性。


二、默认值(DEFAULT)

  • 当字段经常出现特定值时,可设置默认值,插入数据时可省略该字段。
  • 默认值可以是常量、表达式或函数(如 CURRENT_TIMESTAMP)。

以下以 “图书表” 为例进行说明:

🌵创建 “图书表”

在这里,status(图书状态)字段默认值为 “未借阅”,borrower(借阅者)字段默认值为空字符串。这意味着在向图书表插入新图书记录时,如果不指明图书状态或借阅者,会自动使用默认值进行填充。

🌵查看表结构

可以看到,status字段的 Default 列显示为 “未借阅”,borrower字段的 Default 列显示为空字符串。

🌵插入记录

假设要插入一条新图书记录,例如,图书 ID 为 1,书名为 “数据结构与算法”,作者为 “张三”,可以使用以下 SQL 语句:

这条语句能够插入成功,因为 statusborrower字段没有被指定值,会自动使用默认值 “未借阅” 和空字符串。

如果尝试插入一条记录,指明图书 ID 为 2,书名为 “计算机网络”,作者为 “李四”,状态为 “已借阅”,借阅者为 “王五”:

这条语句也会成功,因为指定了所有字段的值。

🌵同时设置NOT NULLDEFAULT

以创建一个 “学生表” 为例,表中包含学生姓名、学号和成绩,成绩默认为 0,且学生姓名和学号字段不允许为空。SQL 定义如下:

在这个表中,name、id字段设置了 NOT NULL 属性,score 字段设置了默认值 0。创建表后查看表结构,会发现 name、id 字段不允许为空,score 字段的默认值为 0

向表中插入数据时,如果不指明成绩,会自动使用默认值 0:

插入成功后,score 字段的值为 0。

🌵注意事项

  1. 谨慎使用默认值:默认值应该设置为合理的值,以确保数据的准确性和一致性。
  2. NOT NULLDEFAULT 的关系:设置了 DEFAULT 属性的字段,通常不需要再设置 NOT NULL,因为即使没有插入值,也会使用默认值填充,从而避免了空值的出现。
  3. 检查表结构:在创建表后,可以使用 DESC 或类似语句检查表结构,以确保默认值和 NOT NULL 约束已正确设置。

三、列描述(COMMENT)

  • 为字段添加注释,提高代码可读性,便于团队协作。
  • 注释信息通过 SHOW CREATE TABLE 查看,DESC 命令不显示。

以下以 “订单表” 为例进行说明:

🌻创建 “订单表”

在这里,每个字段后面都添加了 COMMENT 关键字,用于描述该字段的含义。例如:

  • id字段的描述是 “订单编号”。
  • orderdate字段的描述是 “订单日期”。
  • name字段的描述是 “客户名称”。

🌻查看表的创建细节

可以看到,每个字段的描述信息(COMMENT)都包含在表的创建语句中。

🌻说明

        列描述在创建表时添加,主要目的是帮助程序员或数据库管理员(DBA)更好地理解表结构和字段的含义。这对于维护和扩展数据库非常有帮助,尤其是在团队协作开发中,可以确保所有成员对表结构有一致的理解。


四、Zerofill

  • 用于数值类型的显示格式,左侧补零至指定长度。
  • 注意:不影响实际存储的值,仅为显示效果。

以下以 “书籍表” 为例进行说明:

🍇创建 “书籍表”

在这里,id字段的显示宽度设置为 5,但没有设置 ZEROFILL 属性。

🍇插入数据并查看

向表中插入一条记录,指明 idname的值分别为 1 和 “数据结构与算法”,Price 为 59.99,然后查看表中的数据:

可以看到,id字段显示为 1,并没有按照显示宽度 5 来显示。

🍇修改表结构并添加 ZEROFILL 属性

修改 id字段,添加 ZEROFILL 属性:

再次向表中插入一条记录,指明 idname的值分别为 2 和 “计算机网络”,Price 为 45.50:

查看表中的数据:

可以看到,id 字段显示为 0000100002,因为 ZEROFILL 属性会自动在数值前面填充零,使其显示宽度达到 5 位。

🍇验证底层存储

虽然 ZEROFILL 改变了数据的显示方式,但底层存储的数据仍然是原来的值。可以使用 HEX 函数查看底层存储的值:

可以看到,底层存储的值仍然是 1 和 2,ZEROFILL 只是改变了数据的显示方式。


五、主键(PRIMARY KEY)

  • 主键字段的值唯一且非空,一张表只能有一个主键。
  • 通常使用整数类型(如 INT)作为主键。

以下分别以 "员工表" 和 "库存表" 为例,对主键和复合主键进行说明。

主键案例:员工表

🍀创建员工表

🍀查看表结构

可以看到,id字段的 Key 列显示为 PRI,表示该字段是主键。

🍀插入记录

尝试插入两条记录:

第二条插入语句将会失败,因为 id为 1 的记录已经存在,主键冲突。

🍀删除主键

再次查看表结构,id字段的 Key 列的 PRI 标志将消失。

🍀添加主键

再次查看表结构,id字段的 Key 列的 PRI 标志将重新出现。


复合主键案例:库存表

🍀创建库存表

🍀查看表结构

可以看到,ProductID WarehouseID 字段的 Key 列都显示为 PRI,表示它们共同组成了复合主键。

🍀插入记录

尝试插入两条记录:

第二条插入语句将会失败,因为 ProductID 为 101 且 WarehouseID 为 1 的记录已经存在,复合主键冲突。

允许插入以下记录,因为虽然 ProductID WarehouseID 可能重复,但它们的组合不重复:

🍀查看插入的数据

可以看到,表中有重复的 ProductID 和重复的 WarehouseID,但没有重复的 ProductID WarehouseID 组合。

🍀删除复合主键

再次查看表结构,ProductID WarehouseID 字段的 Key 列的 PRI 标志将消失。

🍀添加复合主键

再次查看表结构,ProductID WarehouseID 字段的 Key 列的 PRI 标志将重新出现。


总结

约束类型 作用 注意事项
NOT NULL 字段值不能为空 避免数据运算异常
DEFAULT 字段默认值 仅对允许为空的字段有效
COMMENT 列描述信息 通过 SHOW CREATE TABLE 查看
ZEROFILL 数值显示补零 不影响实际存储值
PRIMARY KEY 唯一标识记录,确保数据唯一性 每表只能有一个,可为复合主键

网站公告

今日签到

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