MySQL表的约束(一)

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合****法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary
key,auto_increment,unique key,为了详细的讲述,今天这篇博客就先简绍null/not null,default, comment, zerofill这些

1.null/not null

两个值:null(默认的)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办
法参与运算
实践结合,我们创建一个班级表,包含班级名和班级所在的教室
站在正常的业务逻辑中:
如果班级没有名字,你不知道你在哪个班级
如果教室名字可以为空,就不知道在哪上课
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是"约束"

实验证明,如果带了not null,就无法插入NULL,但是我们也发现,为什么选择不插入的时候还会报错呢,这个问题接下来会讲解

2.default

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

  • 预设常用值:为某个数据项提前设定一个出现频率最高的值

  • 省时省力:用户无需每次手动输入,直接接受或按需修改

  • 可覆盖:用户有最终决定权,选择使用默认值或替换为其他值

下面我们创建一个table t2,分别设置not null, default和not null default

下面我们插入数据,不难发现,默认参数会在我们不插入数据的时候自动填充

3.default 与 not null

看完上面的例子你可能会疑惑,既然有了default,那要not null有什么用,毕竟我不输入,它自动会填充default值,其实这样想就不对了,看下面的截图

说明加入了not null就无法输入null了,那么只要default难道就可以输入null了吗,答案是对的

可是为什么呢,因为在创建的时候,系统默认会给我们加上null字段(前提是也不加入default)
不过还是可以注意一下:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空

4.comment

Comment(注释)的核心

  • 说明性文本:用于解释代码逻辑、数据含义或留下提醒,不影响程序运行。

  • 被忽略执行:编译器、解释器或解析器会跳过注释,不产生任何实际指令。

  • 提升可读性:帮助他人(或未来的自己)理解复杂部分,便于维护与协作。

可以发现只有在show create table t3的时候才可以看到建立时候的comment,这就相当于一个注释,告诉我们,当时我们建立这个列的时候是干什么的

5.zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看表的建表语句


可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个属性,括号内的数字是毫无意义的。a和b列就是前面插入的数据,但是对列添加了zerofill属性后,显示的结果就有所不同了


这次可以看到b的值由原来的2变成0000000002,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是10),自动填充0,要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是2

可以看出数据库内部存储的还是2,0000000002只是设置了zerofill属性后的一种格式化输出而已

好啦,今天的表的约束就先学到这里啦,下一篇博客会简绍剩余的表的约束,不见不散哦~~

相关推荐
Roadinforest17 分钟前
NoSQL的最终一致性:真的可靠吗?
数据库·nosql
敲代码的嘎仔19 分钟前
用 Redis 合并写 + DelayQueue 延迟检测,把视频播放进度写库频率降到 1/60
java·开发语言·数据库·redis·缓存·音视频·高并发
承渊政道1 小时前
PostgreSQL 鸿蒙 PC 适配全记录:从原生交叉编译到 HNP 数据库服务闭环
数据库·postgresql·harmonyos·鸿蒙系统·pc端
风哥2号1 小时前
数据库教程FGMT26‑2-GoldenGate数据库容灾迁移02(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库·goldengate
牛油果子哥q1 小时前
向量数据库原理与工程选型:FAISS深度剖析、Milvus基础、检索优化、分片与持久化落地
数据库·milvus·faiss
海浪仙人掌1 小时前
流动比率有哪些分析陷阱?流动比率怎么避开这些陷阱?
大数据·数据库·人工智能
庆登登登2 小时前
MySQL Workbench 鸿蒙 PC 适配全记录:从 GTK_X11 桌面程序到 ArkUI 原生数据库工作台
数据库·mysql·harmonyos
2601_963282772 小时前
政企无线对讲系统落地:从设备采购到长期运维的完整工程实践
大数据·运维·数据库
熊文豪2 小时前
OceanBaseVS金仓:一条 SQL 的两条路——KingbaseES 的性能竞争力从哪来
数据库·sql·电科金仓
大模型码小白2 小时前
数据可视化:AI 生成 HTML5 动态交互式数据图表
前端·数据库·人工智能·深度学习·机器学习·信息可视化·html5