当前位置: 首页 > news >正文

【MySQL】表的约束(上)

在这里插入图片描述

文章目录

  • 表的约束
    • 什么是表的约束
    • 空属性
    • 默认值
    • 列描述(comment)
    • 零填充(zerofill)
    • 主键
  • 总结

表的约束

什么是表的约束

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

相关文章:

  • Java序列化
  • C++刷题(一):顺序表 + 单链表
  • mne溯源相关说明
  • 威胁驱动的网络安全方法论
  • Vue中涉及的字符串模板与dom模板
  • 约束优化技术:KKT条件的完整推导与应用
  • maven之自定义插件
  • 【清华大学第七版】DeepSeek赋能家庭教育的实操案例(批改作文+辅助语文/数学/科学学习+制定学习计划)
  • 黑盒测试VS白盒测试
  • 30天学习Java第五天——数组 字符串
  • 探索Trae:Cursor的完美替代,Claude-3.5-Sonnet与GPT-4o免费体验
  • SpringBoot3集成RocketMQ阿里巴巴消息队列中间件实现消息发送与接收详细教程
  • 人工智能之数学基础:线性变换的象空间和零空间
  • 富文本编辑器(Rich Text Editor,RTE)
  • 自动化APP测试APPium的元素等待
  • C++:类和对象(从底层编译开始)详解[前篇]
  • 【NVIC】
  • import ast与import json的区别
  • 电机控制常见面试问题(十二)
  • Wiform基础知识21-40
  • 滨湖区知名做网站选哪家/优化落实防控措施
  • 上海做宴会的网站/抖音seo关键词优化排名
  • 做网站哪个公司最/友博国际个人中心登录
  • 做受视频网站 mcb3dbd/五种常用的网站推广方法
  • 青龙建站网/1688关键词排名查询
  • 手机网站跳转代码/怎么做推广让别人主动加我