游乐游手机版
首页/数据库/文章详情

MySQL数据库非空约束主键外键作用详解图文教程

时间:2026-06-13 06:58
咱们聊一聊数据库中的表约束。这玩意儿说白了,就是数据库里必须得有一系列规则,通过这些规则,来保证将来塞进去的数据是准确、靠谱的。约束的本质,其实就是通过技术手段,逼着写SQL的人插入正确的数据,从而保证数据库里数据的准确性。 一、非空约束 非空约束就两个值:null(默认)和 not null(不为

咱们聊一聊数据库中的表约束。这玩意儿说白了,就是数据库里必须得有一系列规则,通过这些规则,来保证将来塞进去的数据是准确、靠谱的。约束的本质,其实就是通过技术手段,逼着写SQL的人插入正确的数据,从而保证数据库里数据的准确性。

一、非空约束

非空约束就两个值:null(默认)和 not null(不为空)。数据库中的字段默认基本都是可以为空的,但实际开发中,尽可能让字段不为空——数据要是为空,根本没法参与运算,这是个很重要的小细节。

这里多说一句,null'' 是两个完全不同的东西:null 是“什么都没有”,而 '' 是“有,但是空”。这区别得弄清楚。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

二、default 约束

default,跟 C++ 里的缺省值差不多,就是可以给字段指定一个默认值。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

not nulldefault 一起用会怎样?

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

这里得注意一下:如果咱们的表中没有设置 defaultnot null 约束,那它默认就是 default null;但如果设置了 not null,就不会再有 default null 了。

三、comment 列描述

列描述其实就是个注释,方便我们理解这个字段是干嘛用的。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

四、zerofill 约束

关于 int(10) 这个写法,如果没有 zerofill 约束,其实没什么意义。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

简单来说,int(10) 里的那个 10,就是限定数字的显示宽度。如果实际数字不足10位,就用0在前面补齐显示。

五、主键约束

主键,primary key,用来唯一标识该字段里的每一行数据。它不能重复,也不能为空,而且一张表里最多只能有一个主键。通常情况下,主键所在的列都是整数类型。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

去除主键约束也很简单:

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

添加主键约束:

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

再说说复合主键。主键不是只能给一列设置,给多列设置主键,那就是复合主键。需要注意:复合主键是只有当那些设置了主键的列,同时与过往数据完全相同时,才会产生主键冲突。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

六、auto increment 约束

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

auto_increment 这玩意儿,当对应的字段不给值时,系统会自动触发:它会从当前字段已有的最大值基础上加上1,得到一个全新的、不同的值。通常会跟主键搭配着用,作为逻辑主键。

自增长有几个特点必须注意:任何一个字段要自增长,前提是它本身是个索引(key那一列要有值);自增长字段必须是整数;一张表最多只能有一个自增长。

如果想自定义自增长的起始值:

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

如果想查看最后一次插入的自增长的值:

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

七、唯一键

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

主键不能为空,而唯一键可以为空,这就要再次强调一下:NULL 是“什么都没有”,它是不参与计算的。还有一点很重要:一张表只能有一个主键,但可以有多个唯一键。

八、外键

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

因为学生是从属于某个班级的,所以就需要外键来维系这种关系:

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

外键主要就是用来定义表与表之间的约束。创建外键时,主表必须有主键约束或unique约束,而外键约束定义在从表上。定义外键后,要求外键列的数据必须在主表的主键列中存在,或者为null。

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

MySQL数据库非空、主键、外键到底管什么详解(附详细图文)

总结

总的来说,MySQL的约束就是一套严格的规则,目的是保护数据的一致性和完整性。非空、默认值、主键、唯一键、外键……每一种约束都有它特定的场景和意义,理解了这些,写SQL的时候就知道如何“约束”自己,不让脏数据溜进数据库里。

来源:https://www.jb51.net/database/361906b5d.htm
上一篇2026年MySQL数据库备份与恢复新手完整指南 下一篇MySQL update语句执行流程深度解读与原理分析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Hive row_number()函数性能瓶颈分析与优化
数据库 · 2026-07-02

Hive row_number()函数性能瓶颈分析与优化

Hive中row_number()窗口函数的性能瓶颈在于数据量庞大、排序开销高、索引不佳、查询复杂度高及数据分布不均。优化可通过分页替代全量编号、合理创建索引、利用分区减少扫描数据量及缓存稳定结果来缓解。

Hive Metastore支持的数据库有哪些
数据库 · 2026-07-02

Hive Metastore支持的数据库有哪些

HiveMetastore除默认Derby外,还支持MySQL数据库、PostgreSQL数据库、Oracle数据库、MSSQLServer数据库等主流关系型数据库。具体选择需综合考虑数据量、并发访问、性能要求和预算等因素,没有绝对最优解,只有最适合当前环境的配置方案,需结合实际业务需求综合评估。

MyBatis Hive多表关联实现方法
数据库 · 2026-07-01

MyBatis Hive多表关联实现方法

MyBatis处理Hive多表关联查询与普通数据库类似。需准备映射文件,使用association和collection标签定义关联;创建Java实体类包含集合成员变量承接一对多关系;编写Mapper接口声明查询方法;配置MyBatis环境注册映射;最后通过SqlSession调用即可获取关联数据。

提升Hive Metastore查询速度的有效方法
数据库 · 2026-07-01

提升Hive Metastore查询速度的有效方法

HiveMetastore查询优化需从存储优化、缓存机制、查询策略、索引构建、并行能力、配置调优、硬件升级、数据分区及定期维护等多方面协同入手,综合提升系统吞吐量与响应速度,有效降低查询延迟。

Hive Metastore处理大数据的核心机制
数据库 · 2026-07-01

Hive Metastore处理大数据的核心机制

HiveMetastore管理元数据,通过分库分表、读写分离应对海量元数据,调整JVM堆内存并采用G1GC提升稳定性,利用HDFS或云存储及CBO优化器加速查询,在大数据场景下提供高效元数据服务。