MySQL表的约束(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL表的约束

六、自增长

设置自增长属性的字段,插入数据时若不给该字段值,那么系统会自动找出当前字段中已有的最大值,将最大值进行加一后的值插入该字段

任何一个字段要做自增长,前提是其本身必须是一个索引(Key一栏有值),且自增长字段必须是数值类型,一张表最多只能有一个自增长字段

自增长通常和主键搭配使用,作为逻辑主键。建议将主键设计成与当前业务无关的字段,避免因为业务逻辑调整而修改主键

如创建一个表,表中包含id和name,将id同时设置成主键和自增长字段


249f5c3779c24f69891575ead0a9a298.png


创建表完毕后查看表结构,可以看到id的Extra列中出现了auto_increment标志


735f59a0f97842ea84177b9381039e8e.png


向表中插入第一条记录时若没有指明自增长字段的值,那么自增长字段的值默认将会从1开始


f30a88af13ce4a1292d624563db09d82.png


后续向表中插入记录时若也不指明自增长字段的值,那么自增长字段的值就会依次递增

991974d56f6945bfa71eadd1176f0e5e.png



插入记录时也可指明自增长字段的值,此时将会使用该值进行插入,但指明的值不能和表中已有的值重复

9ac7d77e12b54d19885c56e5b72c0753.png



此后向表中插入时若又不指明自增长字段的值,那么自增长字段的值将会找出最大值,将最大值加一后得到的值作为自增长字段的值插入

bfa319fdd2064bb38a03aa7c1ebb4e15.png



一般自增长字段设置后就不需手动为该字段插入值了,直接让其从1开始进行自增长即可


七、唯一键

一张表中往往有很多字段需要唯一性,但一张表中只能有一个主键,而唯一键就可以解决表中有多个字段需要唯一性约束的问题

唯一键和主键都能保证字段中数据的唯一性,但唯一键允许字段为空,并且可以多个字段为空,空字段不做唯一性比较

不是主键具有唯一性,而是某个具有唯一性的字段被选择成为了主键,而那些不是主键但是同样需要唯一性约束的字段就应设置成唯一键

创建一个学生表,表中包含学生的id、姓名和电话号码,将选择id作为主键,但电话号码也应具有唯一性约束,因此将电话号码设置成唯一键

97d3006025424184848b7f82a7fbd3e3.png



表创建完毕后查看表结构,可以看到iphone的Key列出现了UNI标志,这表明其已经成功被设置成唯一键


a374fbb570d64efc84e7c44fcd2de551.png


向表中插入记录时,若插入记录中的电话号码与表中已有记录的电话号码出现重复,那么就会因为唯一键冲突而插入失败


f250a6ec389143ecaf8c68c54f48db86.png


向表中插入的记录可以不指明唯一键字段的值,此时该字段默认为空,不做唯一性比较


bf4dad1e30f44c9e8456a484c5d78408.png


八、外键

外键用来定义主表和从表之间的关系,外键约束主要定义在从表上,主表必须有主键约束或唯一键约束

外键定义后,要求插入外键列的数据必须在主表对应的列存在或为null

如先创建一个班级表作为主表,表中包含班级的id和班级名,并将班级id设置为主键


a250f03875344195b6a979a8b1307e03.png


再创建一个学生表作为从表,表中包含学生的id、姓名和学生所在班级对应的id,并将学生表中的班级id列设置成外键,关联班级表中的班级id列


9883b7e4ac654175bec7194fcba8969b.png


表创建完毕后查看学生表的表结构,可以看到学生表中的班级id对应的Key列出现了MUL标志,这表明class_id已经成功被设置成了外键


7ebd6beb4b8243c6adcfab8e4c5ffca3.png


为了演示外键约束,先向班级表中插入两条记录


bd7304f9c4b346168e5ec392b01d6616.png


向学生表中插入记录时,若插入的记录对应的班级id是班级表中存在的,或者插入的班级id为null,那么此时是允许进行插入的


7a774e0271b94ac4bad72ec5098d1bd8.png


但若插入学生表的记录对应的班级id是3或不指定,相当于插入学生表的这条记录对应的班级并不存在,此时将会插入失败,这就是外键约束

508f72bf226a4f678e273003cadcd58a.png



若向班级表中插入班级id为3的班级信息,然后再向学生表中插入上述记录,这时就允许插入了


cb0cd8fb009d4eee9ea79a2dbc69144e.png


创建班级表和学生表后就算不设置外键,在语义上其实也已经有了外键,但这样没办法保证后续插入学生表的记录中的班级id的正确性

而给学生表中的班级id设置成外键后,外键约束就能保证只有班级id在班级表中存在的记录才能插入学生表,否则就会插入失败

实际建立外键的本质就是把相关性交给MySQL去审核了,提前告诉MySQL表之间的约束关系,当用户插入不符合业务逻辑的数据时,MySQL就不允许插入


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
5月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
1月前
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
36 4
|
2月前
|
SQL 关系型数据库 MySQL
MySQL中外键的使用及外键约束策略
这篇文章讨论了MySQL中使用外键的重要性,包括外键的概念、不使用外键可能导致的问题、如何设置外键约束以及不同的外键约束策略(如CASCADE和SET NULL),并通过示例演示了这些概念。
MySQL中外键的使用及外键约束策略
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库基础:约束
约束是对数据库表中字段施加的规则,确保数据的正确性、有效性和完整性。主要分为非空约束、唯一约束、默认约束、主键约束和外键约束。非空约束禁止字段值为null;唯一约束确保字段值唯一,允许null值重复;默认约束设定默认值;主键约束结合非空与唯一约束,并可设为自增型;外键约束则通过关联其他表的主键,保证数据一致性。检查约束确保字段值满足特定条件。
48 1
|
3月前
|
数据采集 关系型数据库 MySQL
在 MySQL 中使用约束
【8月更文挑战第11天】
59 0
在 MySQL 中使用约束
|
5月前
|
SQL 关系型数据库 MySQL
MySQL----约束
MySQL----约束
35 1
|
4月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
4月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
4月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。