【MySQL】表的约束

文章目录

表的约束

什么是表的约束

表的约束(Constraints)是数据库表中的规则,用于限制存储的数据,保证数据的完整性、一致性和准确性。

下面我们讲讲具体的表的约束

空属性

  • 两个值:null(默认的)和not null(不为空)
  • 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

我们先默认创建一张表:

可以看见,当我们不指定约束条件的时候,创建表时默认会给Null约束条件添加上Yes,表示这里可以插入null。我们来试试。

插入数据:

我们重新创建一张设置为not null。

当表的这个属性被设置为No时,就表示不能插入Null了。

默认值

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

拿我们刚刚创建的表为例:

这个约束就是默认值,如果设置了默认值,当我们插入的时候忽略这一项时,就会拿默认值当中的数据进行填充。

我们来设置一下默认值,一数据没有默认值,一个数据有默认值。

设置默认值只需要在建表的时候在后面加上default即可,我们来插入数据:

可以看见这里虽然没有设置默认值,但是默认值被默认设置为了Null,因为我们没有设置not null,所以是会默认填入null的。

当将null约束设置为not null的时候就就不能忽略了。

列描述(comment)

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

来进行了解。

列描述就类似于在我们写代码时的注释。

这就是列描述,用来描述这一列是用来干嘛的。

零填充(zerofill)

在 MySQL 中,ZEROFILL 是一种数值列的格式化属性,用于自动在数值前补零,使其达到指定的宽度。

我们创建一张表,不加任何约束是这样的,当我们加上zerofill之后:

可以看见,修改完zerofill约束条件之后,int后面多了一个10,后面多了一个zerofill,为什么10后面讲,我们先讲这个zerofill属性添加之后有什么影响:

可以看见,添加了zerofill属性的列前面多出了很多个0,这是为什么呢,我们加上前面的0,一共有10为数,所以这个10,就是位数,当我们插入一个数的时候,如果这个数的位数小于int后面的数,那么我们会在前面自动补上0,如果这数的位数是大于int后面括号中的数时,是多少就是多少。

主键

**主键(Primary Key)**是关系数据库中用于唯一标识表中每一行记录的一个或多个字段的组合。

可能很多人看到这句话之后也不是很理解什么是主键,那么我们创建一张表,来解释一下什么是主键:

当我们创建表的时候,只需要在后面加上primary key,就表示这一列是主键,我们来插入一点数据,来具体看看主键是什么:

我们设置的id是主键,当我们插入第一组值的时候,id是1,当我们插入第二组值的时候id也是1,MySQL就不让我插入了,但是当我们插入的值是2的时候,MySQL又让我们插入了。

所以,被设为主键的列当中的数据时唯一的,不能有重复。


复合主键

什么是复合主键呢,我们上面是一列是主键,但是主键不一定只有一列,可以有多列啊,这被称为复合主键,我们来设置一下复合主键:

这就是设置复合主键,我们来看看复合主键有什么特征:

a和b都被设置为了主键。

我们来插入几组值试试:

插入三组值已经足够说明问题了。


结论:当我们插入的被设为主键的值和历史上插入过的数据都相同时,是不被允许插入的,但是当我们插入的数据只有一个是和历史上的数据是相同的,是可以被允许的。

总结

在本文中,我们深入探讨了 MySQL 中几个常用的表约束,包括 NULL 约束、DEFAULT 约束、COMMENT 约束、主键约束以及 ZEROFILL 约束。这些约束在数据库设计中扮演着至关重要的角色,通过它们可以确保数据的有效性和完整性,帮助开发者避免无效数据的插入,并提升数据表的可维护性。掌握这些约束的使用,能够让我们在实际开发中构建出更加健壮和清晰的数据库结构,从而提升系统的稳定性和可扩展性。希望通过本文的介绍,大家对 MySQL 的表约束有了更深入的理解,并能够在实际项目中灵活应用。

相关推荐
Q26433650233 分钟前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
事圆则缓9 分钟前
Kotlin 异步与并发:从一次搜索请求走到状态流
android·开发语言·kotlin
帅得不敢出门1 小时前
Android Framework定制卸载确认窗口
android
要开心吖ZSH1 小时前
《通过SeaTunnel 把 MySQL 的数据搬进 Doris》番外篇:容量、切分与速度——Doris 能扛多少,比 MySQL 快多少
mysql·性能优化·doris·分区·分表·分桶
yunwei372 小时前
eBPF 实例教程:BPF 动态指针处理可变长度数据
linux·后端·性能优化
Funlang2 小时前
295 字节机器码,跑赢 LuaJIT
性能优化
打工仔折腾 AI2 小时前
260+异构同步链路实战:如何用语义化自动翻译破解CDC DDL同步痛点
人工智能·后端·python·自然语言处理·性能优化·langchain·机器翻译
Android-Flutter2 小时前
Compose 什么叫重组?怎么样触发重组?
android·compose
硫酸锌012 小时前
安卓手机连接Windows电脑后通过DHCP服务为手机分配IP地址
android·windows·计算机网络
曦夜日长2 小时前
MySQL系统篇,数据库基础(二):数据库概念、SQL 分类与存储引擎
数据库·sql·mysql