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

MySQL【表的约束上】

一、表的约束

  • 在 MySQL 数据库的使用过程中,我们会发现仅靠数据类型来限制字段远远不够 ——数据类型的约束能力单一,无法从业务逻辑层面保证数据的正确性。比如要求用户表的邮箱字段唯一、订单表的用户 ID 必须关联存在的用户,这些需求都需要表的约束来实现。
  • 通过表的约束 , 保证数据的合法性, 从业务角度方面,保证数据的正确性
  • 本质是通过技术手段 , 倒逼程序员插入正确的数据 , 反过来,站在MySQL的视角,凡是插进来的数据,都是符合数据约束的
  • 数据库为什么需要这么严格?
    • 因为数据库是我们维护数据的最后一道防线,如果要确保数据的正确性和合法性,需要更多的约束。

二、空属性

基础约束主要用于定义字段的基础规则,比如是否允许为空、默认值是什么、字段的说明信息等,是设计表时的基础配置。

1. 空属性:null /not null

  • MySQL 中字段的空属性只有两个值null(默认,允许字段为空)和not null(禁止字段为空)。
  • 开发建议:实际开发中尽可能将字段设置为not null,因为null 值无法参与任何运算(比如1+null的结果还是 null),会导致数据计算、统计出现异常。

案例:

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

三、默认值

当某个字段的数据会经常性出现固定值时,可通过default为其设置默认值。插入数据时若不给该字段赋值,系统会自动使用默认值若显式赋值,则覆盖默认值。

  • 默认值生效,数据在插入的时候不给字段赋值,就使用默认值
  • 只有设置了default的列,才可以在插入数据的时候,对列进行省略

建表的时候 , name 这里设置了not null , 系统不会再自动加上 default

  • 如果我们没有明确指定一列插入,用的是default ;如果建表中,对应列没有设置默认的defalut值,无法直接插入。
  • default 和 not null 不冲突 , 而是互相补充的 。
  • not null【null 或者 合法数据】
  • default : 但用户忽略这个列的时候,使用默认值【如果设置了】,没有设置,直接报错

不设置not null的时候 , 会自动加上 default

Mysql 会对我们的字段的描述做优化 ,加了default null~

四、列描述

comment是字段的注释说明,无实际业务功能,仅用于描述字段含义,方便程序员、DBA 理解表结构,属于数据库的 “文档化” 配置。

注意:使用desc 表名无法查看注释,需通过show create table 表名\G查看

注意:not nulldefalut一般不需要同时出现,因为default本身有默认值,不会为空
  • 设置了default , 无论填不填 , 值都不为空 , not null的设置每意义了
  • 设置了 not null , 如果没写default , 系统会自动加上 default null

comment , 是给程序员 ,DBA看的 , 是一种软性的约束

五、zerofill

zerofill是数字类型字段的专属约束,作用是当数字的显示宽度小于设定的宽度时,左侧自动填充 0

  1. zerofill,数字类型后的括号宽度(如int(10))无实际意义;
  2. zerofill仅影响显示效果,数据库内部实际存储的还是原始数字
  3. 搭配unsigned使用(避免负数填充 0 的逻辑冲突)

格式化显示建表描述

如果宽度小于设定的宽度(这里设置的是10),自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。为什么是这样呢?我们可以用hex函数来证明。

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

  • a被定义为int not null,没有指定unsigned因此是有符号整数。有符号int的取值范围是-21474836482147483647其中符号占一个字符,最大可能显示的字符长度为 11(例如-2147483648正好 11 位)。MySQL 给有符号int的默认显示宽度就是11

  • b被定义为int unsigned not null,无符号整数取值范围是04294967295,最大值为 10 位数字,所以默认显示宽度为10

六、主键

主键是用于唯一标识表中每一条记录的约束,是数据库中最常用的核心约束之一,其核心特性为:

  1. 主键字段不能重复、不能为空
  2. 一张表最多只能有一个主键
  3. 主键字段通常设计为整数类型(便于索引和查询)。

6.1主键约束

主键约束:主键对应的字段中不能重复,一旦重复,操作失败。
主键:约束程序员,插入某个数据不重复

6.2 删除主键

删除主键

6.3追加主键

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

最好在建表的时候,就把主键设置好 , 以防后面出现数据冲突 , 冲突数据都不太好处理

6.4 复合主键

复合主键

当单个字段无法唯一标识记录时,可将多个字段组合作为主键,称为复合主键。复合主键的唯一性由所有组合字段共同保证,只有当所有字段值都重复时,才会触发主键冲突。

http://www.jsqmd.com/news/473762/

相关文章:

  • Intel RealSense D455 在ARM64 (Jetson) 平台上 ubuntu22.04下使用笔记
  • 2026杭电多校春季训练赛日志
  • 【effective c++】条款四十五:运用成员函数模板接受所有兼容类型
  • 安卓wakelock 学习
  • 从空白文档到完整初稿:Paperzz 如何让毕业论文写作「零门槛」通关?
  • 创新GL微电网二次控制:基于事件触发的下垂控制及其最小事件触发间隔的扰动补偿研究“(具有参考文...
  • if-else条件语句详解
  • 【深度学习代码流程】李宏毅机器学习HW-1:预测美国COVID-19阳性病率
  • MATLAB/Simulink永磁直驱风力发电系统:SVPWM空间电压矢量调制与双闭环解耦控制应用
  • 从选题到成稿零焦虑:Paperzz 毕业论文初稿写作,让学术创作告别 “卡壳式内耗”
  • 开关磁阻电机电流斩波控制仿真 simulink仿真 双闭环控制等 含有文档报告,详细的参数说明
  • Vue3 + Vite 局域网 HTTPS 访问实战:手机秒连本地开发环境
  • 2026 学术写作破局:Paperzz 如何用「四步闭环法」解决毕业论文初稿难产,让你 3 天写完合格初稿
  • 【软件测试】系统学习清单(含知识点+掌握程度拆解)
  • # Vue 实现 PDF 预览与批量打印组件
  • 论文党「反内耗」神器:Paperzz 把毕业论文初稿写成「开卷答题」,4 步搞定从 0 到成稿
  • OpenClaw Skill 操作钉钉(原理+20个实例)
  • 数据预处理骚操作
  • 自动化仓储系统的核心设备堆垛机最怕啥?急起急停带来的机械冲击。老司机都知道S型曲线速度控制才是王道,今天咱就扒一扒西门子S7-1500里的实战代码
  • 高通跃龙QCS9100平台上工业缺陷检测实战(1): 从摄像头到端侧推理的最小闭环
  • 实测负荷数据(示例)
  • 北京上门回收老安宫牛黄丸、片仔癀!本草拾光商行高价收,变现快时效拉满 - 品牌排行榜单
  • 西门子PLC精确计算设备运行时间程序(1200PLC与1500PLC通用)——改良版实时时间比较法
  • C++学习日志——面向过程篇3.11
  • 架构2
  • ADRC双环自抗扰控制永磁同步电机矢量控制伺服系统Matlab仿真探索
  • IT系统全生命周期管理和运营方案(Word)
  • PYTHON学习笔记3
  • 代码随想录算法训练营第十天 | 用栈实现队列、 用队列实现栈、有效的括号、删除字符串中的所有相邻重复项
  • OFDM MQAM在衰落信道下误比特率性能仿真探索