【MySQL数据库学习】MySQL表的约束(上)


🔥承渊政道: 个人主页
❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法》 《C++知识内容》 《Linux系统知识》 《算法刷题指南》 《测评文章活动推广》 《大模型语言路线学习》 《MySQL数据库学习》
✨逆境不吐心中苦,顺境不忘来时路!✨ 🎬 博主简介:

在MySQL 数据库的学习过程中,表结构的设计不仅仅是创建字段和指定数据类型这么简单.随着业务数据越来越复杂,我们还需要思考一个更重要的问题:如何保证数据的正确性、完整性和一致性?这时,表的约束就发挥了关键作用.约束可以理解为数据库为表中数据设置的一组规则,用来限制字段中允许存储的数据内容,避免出现无效数据、重复数据、空值异常以及表与表之间关系混乱等问题.例如,在用户表中,用户编号不能重复;在订单表中,订单必须关联到真实存在的用户;在商品表中,价格不能为负数.这些规则如果完全依赖程序代码来判断,不仅容易遗漏,也会增加维护成本.而通过 MySQL 提供的约束机制,我们可以在数据库层面直接对数据进行规范和保护.本文将围绕 MySQL 表约束展开学习,先从常见约束的基本概念入手,逐步了解主键约束、非空约束、唯一约束等内容,为后续深入掌握表设计和数据完整性打下基础.废话不多说,下面跟着小编的节奏🎵一起去疯狂的学习吧!

目录

1.表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性.比如有一个字段是email,要求是唯一的.

表的约束很多,这里主要介绍如下几个:

约束类型 关键字 作用说明
空值约束 NULL / NOT NULL 用于控制字段是否允许为空。NULL 表示可以为空,NOT NULL 表示不能为空。
默认值约束 DEFAULT 用于给字段设置默认值,当插入数据时没有指定该字段的值,就会使用默认值。
注释约束 COMMENT 用于给字段添加说明信息,方便后期查看和维护表结构。
零填充约束 ZEROFILL 用于数值类型字段,当显示宽度不足时,会在左侧自动补 0
主键约束 PRIMARY KEY 用于唯一标识表中的每一条记录,主键字段的值不能重复,也不能为空。
自增长约束 AUTO_INCREMENT 通常配合主键使用,使字段的值自动递增,常用于编号、ID 等字段。
唯一约束 UNIQUE KEY 用于保证字段中的值唯一,不能出现重复值。

2.空属性

两个值:null(默认的)和not null(不为空)

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

案例:创建一个班级表,包含班级名和班级所在的教室.

站在正常的业务逻辑中:

如果班级没有名字,你不知道你在哪个班级

如果教室名字可以为空,就不知道在哪上课

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

插入数据时,没有给教室数据插入失败:


3.默认值

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

default如果设置了,用户将来插入有具体的数据,就用用户的,没有就用默认的

如果我们没有明确指定一列要插入,用的是default,如果建表中,对应列默认没有设置default值,无法直接插入,default 和 NOT NULL不冲突,而是互相补充的.

当用户想插入的时候:

  • NULL
  • 合法数据

当用户忽略这一列的时候,使用默认值(如果设置了)

如果没有设置,直接报错!

如果字段没有加 NOT NULL 约束,并且默认是 DEFAULT NULL,那么该字段可以插入 NULL 值.


4.列描述

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

注意:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空.

通过desc查看不到注释信息:

通过show可以看到:


5.zerofill

可以看到int其实是可以有值的,这个代表什么意思呢?其实没有zerofill这个属性,括号内的数字是毫无意义的.a和b列就是前面插入的数据,如下:

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

对b列添加了zerofill属性,再进行查找,返回如下结果:

这次可以看到b的值由原来的2变成00000002,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是10)自动填充0.


6.主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键(不意味着一个表中的主键,只能添加给一列!一个主键可以被添加到一列,或者多列上-->复合主键);主键所在的列通常是整数类型.

案例:创建表的时候直接在字段上指定主键.

主键约束:主键对应的字段中不能重复,一旦重复,操作失败.

当表创建好以后但是没有主键的时候,可以再次追加主键

删除主键

复合主键:

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段

作为主键,可以使用复合主键.

🚀真正的勇者不是流泪的人,而是含泪奔跑的人!


敬请期待下一篇文章内容


每日心灵鸡汤: 迎着光,坚定前行!

迎着光,坚定前行.前路漫漫,山不转水转,困难和坎坷,正是在锤炼和打磨一个人的心性.保持积极的姿态,才能找到向上的路.站在树上的鸟,不怕树枝断裂,因为它依赖的不是树枝,而是自己的翅膀.沉住气,那些不断打磨自己的日复一日,终会在未来的某天让你看到坚持的意义.人在阻力越大时,越能爆发出惊人的力量.请相信,你所有的努力与积累,都在为你默默铺路.奋力向前奔跑的人,终会与期待的美好撞个满怀.

相关推荐
Nturmoils40 分钟前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
博客18003 小时前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴4 小时前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
渣波5 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
众少成多积小致巨21 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
Jim6001 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL1 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_1 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库