【MySQL】常用约束语法总结

一、 基础属性与格式约束命令

1.1 空属性约束 (NOT NULL)

  • 概念解释:在表定义时强制要求某列不得为空,用于从底层保证关键业务数据的完整录入。

  • 笔记

    • 声明语法 :在创建表时的字段类型后直接追加 not null

    • 命令示例class_name varchar(20) not null

    • 测试验证命令 :插入数据时不给定该字段的值或显式给定 null,系统会报错拒收。

1.2 默认值约束 (DEFAULT)

  • 概念解释 :为数据列指定一个常量作为预设值。若用户在 INSERT 时未显式提供该列的数据,系统将自动写入此预设常量。

  • 笔记

    • 声明语法 :在字段定义后追加 default [具体值]

    • 命令示例sex char(2) default '男'

    • 触发命令 :插入时必须完全省略该列,例如 insert into tt10(name) values('zhangsan'); (省略了 sex 列)。

1.3 列描述约束 (COMMENT)

  • 概念解释:虽不具备物理限制,但作为"软约束"将开发者的业务意图以注释形式永久绑定在数据库结构中。

  • 笔记

    • 声明语法 :在字段定义末尾追加 comment '[描述文本]'

    • 命令示例name varchar(20) not null comment '姓名'

    • 查看命令 :必须使用 show create table 表名 \G 命令才能查阅,普通的 desc 表名; 无法显示。

1.4 格式化显示约束 (ZEROFILL)

  • 概念解释 :显示层面的排版约束。当数值宽度低于设定阈值时,强制在左侧使用 0 进行前导补齐。

  • 笔记

    • 声明语法 :在整型数值定义后追加 zerofill

    • 命令示例a int(5) unsigned zerofill

    • 修改已有字段命令alter table 表名 change [旧列名] [新列名] int(5) unsigned zerofill;

二、 唯一性与标识约束命令

2.1 主键约束 (PRIMARY KEY)

  • 概念解释:保证实体的绝对唯一性。将指定列升级为主键,要求数据既不重复也不为空。

  • 笔记

    • 单列主键声明语法 :直接在字段后追加 primary key

      • 示例:id int unsigned primary key
    • 复合主键声明语法:在所有字段定义完毕后,单独声明。

      • 示例:primary key(id, course)
    • 后期追加主键命令alter table 表名 add primary key(字段列表);

    • 删除主键命令alter table 表名 drop primary key;

2.2 自增长约束 (AUTO_INCREMENT)

  • 概念解释:交由数据库引擎维护的序列号生成器,通常挂载于主键之上,实现逻辑主键的自动累加。

  • 笔记

    • 声明语法 :在整数索引列后追加 auto_increment

    • 命令示例id int unsigned primary key auto_increment

    • 获取最新值命令 :执行 select last_insert_id();

2.3 唯一键约束 (UNIQUE KEY)

  • 概念解释 :业务层面的去重约束,确保一列或多列的数据在全表中不出现重复值(但对 null 免疫)。

  • 笔记

    • 声明语法 :在字段类型后追加 uniqueunique key

    • 命令示例card_id char(18) unique key comment '身份证'

三、 跨表参照约束命令

3.1 外键约束 (FOREIGN KEY)

  • 概念解释:跨越两张表的强制参照规则。要求子表(从表)的某列数据,必须源自父表(主表)的合法范围。

  • 笔记

    • 声明语法:在子表的建表语句末尾,显式绑定引用关系。

    • 命令示例foreign key (class_id) references myclass(id)

    • 触发拦截机制 :当使用 insert into 子表 插入一个在主表对应列中查不到的值时,MySQL 底层会直接驳回该操作。

相关推荐
Mr.HeBoYan2 分钟前
DPDK为什么越来越少使用rte_ring?——从Lock-Free到Run-to-Completion,重新理解现代DPDK架构演进(上)
linux·网络·算法·性能优化·架构·dpdk
宠友信息14 分钟前
Redis 内容社区源码架构优化与即时通讯数据一致性处理
spring boot·后端·websocket·mysql·uni-app
Elastic 中国社区官方博客16 分钟前
使用 Elasticsearch 作为 Grafana 的直接替代 Prometheus 后端
大数据·数据库·sql·elasticsearch·搜索引擎·grafana·prometheus
XTIOT66618 分钟前
CRPT 诚实标识采集落地技术实践:分工况硬件选型与合规数据标准化解决方案
大数据·运维·人工智能·嵌入式硬件·物联网
杨婷12322 分钟前
2026 企业微信会话存档服务商选型指南:一维助手方案深度解析
大数据·数据库·企业微信
浩瀚地学41 分钟前
【Java基础复习】IO流(二)
java·开发语言·经验分享·笔记·学习
2601_963771371 小时前
Optimizing Logistics and Transportation Sites on WordPress
前端·数据库·windows·php
AC赳赳老秦1 小时前
采购专员自动化:OpenClaw 自动比价、生成询价单、跟踪供应商报价进度实战指南
开发语言·数据库·人工智能·python·自动化·github·openclaw
蚁库1 小时前
Oracle 11g RAC 多路径配置总搞不定?iSCSI + Multipath + ASM 磁盘组,14节视频带你完整通关
数据库·oracle
云栖梦泽1 小时前
从 IMX415 摄像头驱动理解 Media Controller 框架
linux·开发语言·c++·嵌入式硬件