【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 的表约束有了更深入的理解,并能够在实际项目中灵活应用。

相关推荐
鸿蒙布道师1 分钟前
鸿蒙NEXT开发全局上下文管理类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
树獭非懒9 分钟前
ContentProvider存在的意义:从Android沙箱机制看安全数据共享的设计哲学
android·客户端
拄杖忙学轻声码10 分钟前
shardingsphere-jdbc集成Seata分布式事务
mysql·spring cloud
恋猫de小郭12 分钟前
IntelliJ IDEA 2025.1 发布 ,默认 K2 模式 | Android Studio 也将跟进
android·前端·flutter
神仙别闹35 分钟前
基于javaEE+jqueryEasyUi+eclipseLink+MySQL的课程设计客房管理信息系统
mysql·java-ee·课程设计
tan &38 分钟前
Android开发案例——简单计算器
android
学吧别真挂了39 分钟前
拒绝卡顿!大学生也能掌握的前端性能优化实战手册
前端·性能优化
梦想不只是梦与想40 分钟前
鸿蒙系统开发状态更新字段区别对比
android·java·flutter·web·鸿蒙
异常君42 分钟前
深入解析 InnoDB 死锁:从案例到方案,全流程透视指南
数据库·后端·mysql
半糖土豆爱编码_1 小时前
【mysql】Mac 通过 brew 安装 mysql 、启动以及密码设置
数据库·mysql·macos