再谈表的约束

文章目录
- 自增长
- 唯一键
- 外键
自增长
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
- 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
- 自增长字段必须是整数
- 一张表最多只能有一个自增长
mysql> create table if not exists tt21( id int unsigned primary key auto_increment, name varchar(20) not null );
Query OK, 0 rows affected (0.22 sec)mysql> desc tt21;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.06 sec)mysql> insert into tt21 (name) values ('a');
Query OK, 1 row affected (0.00 sec)mysql> insert into tt21 (name) values ('b');
Query OK, 1 row affected (0.00 sec)mysql> insert into tt21 (name) values ('c');
Query OK, 1 row affected (0.00 sec)mysql> select * from tt21;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
+----+------+
3 rows in set (0.00 sec)
如果在插入时没有设定自增值,那么默认从1开始,如果插入了一个自增值,那么后面如果没有插入自增值,就从上一个继续开始:

也可以自己设定一个起始值:
mysql> create table tt22( id int unsigned primary key auto_increment, name varchar(20) not null )auto_increment=500;
Query OK, 0 rows affected (0.03 sec)mysql> insert into tt22 (name) values ('a');
Query OK, 1 row affected (0.01 sec)mysql> insert into tt22 (name) values ('b');
Query OK, 1 row affected (0.01 sec)mysql> insert into tt22 (name) values ('c');
Query OK, 1 row affected (0.01 sec)mysql> select * from tt22;
+-----+------+
| id | name |
+-----+------+
| 500 | a |
| 501 | b |
| 502 | c |
+-----+------+
3 rows in set (0.00 sec)
在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值):
mysql> select last_insert_id();
唯一键
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
关于唯一键和主键的区别:我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。
mysql> create table stu( id char(20) unique comment '这是学生的唯一键', name varchar(32) not null );
Query OK, 0 rows affected (0.03 sec)mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | char(20) | YES | UNI | NULL | |
| name | varchar(32) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
如果插入的id是一样的,就会插入失败:

唯一键可以为空:

外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
语法:
foreign key (字段名) references 主表(列)
实例:

主表创建:
mysql> create table class(-> id int primary key,-> name varchar(32) not null-> );
Query OK, 0 rows affected (0.03 sec)
从表创建:
mysql> create table student( id int unsigned primary key, name varchar(20) not null, telephone varchar(32) unique key, class_id int, foreign key(class_id) references class(id) );
Query OK, 0 rows affected (0.06 sec)
主表中含有的信息:
mysql> select * from class;
+----+--------------+
| id | name |
+----+--------------+
| 1 | 物联网101 |
| 2 | 物联网102 |
+----+--------------+
2 rows in set (0.00 sec)
在从表中插入信息:

在从表中插入班级id为1和2都是可以的,但是插入的班级id为3,由于外键约束,导致插入失败。
删除主表中班级id为1 的班级:

id为1的班级里面还有学生,由于外键约束导致删除失败。

相关文章:
再谈表的约束
文章目录 自增长唯一键外键 自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。 自增长的…...
认识一下测试策略与测试方案
目录 测试方案 测试策略 测试策略的内容主要包括 测试技术和工具 测试启动、停止和完成标准 风险分析和应对方案 测试范围 测试角色和职责 测试方法和类型 测试工具 测试层级 测试指标 测试可交付成果 测试方案的内容包括 测试目标 测试范围 测试环境 测试策略…...
Gradle 查看包的依赖关系
在 Terminal 中可以通过 gradle 的命令查看项目中使用的依赖库及其版本,并且可以更加直观的看到各个模块中库之间的依赖关系。同时也可以跟踪并解决与库版本冲突有关的问题。 工具查看 在 Android Studio 中选择 View > Tool Windoors > Gradle 或者直接选择…...
虚幻5|给攻击添加特效
一,打开武器蓝图 选择武器网格体,在细节处找到组件开始重叠,点击 写下以下蓝图,这是最终蓝图,后面会分讲要点 二,actor拥有标签,就是被击打的敌人,我们给actor添加标签 到主界面&am…...
Delphi包管理与依赖:掌握GetIt与DelphiPI的艺术
标题:Delphi包管理与依赖:掌握GetIt与DelphiPI的艺术 在Delphi的广袤生态中,包管理和依赖解决方案是构建大型项目不可或缺的工具。本文将深入探讨Delphi中的两种主要包管理工具:GetIt包管理器和DelphiPI,通过实际代码…...
如何使用unittest和pytest进行python脚本的单元测试
1. 关于unittest和pytest unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试 代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。 pytest是第三方…...
Java中的值传递与引用传递
Java中的值传递与引用传递 在Java编程中,理解值传递与引用传递的概念是编写无误代码的关键。这两个概念有时会让人感到困惑,特别是当它们与对象有关时。现在,我们将一步步地解释这两个概念,帮助你彻底理解它们。 1. 值传递与引用…...
Seaborn库
目录 主要功能和特点 使用方法 实例应用 Seaborn库的最新版本有哪些新功能和改进? 如何在Seaborn中实现复杂的数据预处理步骤,例如数据清洗和转换? Seaborn与其他数据可视化库(如Matplotlib、Plotly)相比有哪些优…...
openresty整合modsecurity
安装依赖包 安装依赖 yum -y install gcc-c flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel libtool libxml2-devel libxslt-devel安装依赖包 ftp://ftp.icm.edu.pl/vol/rzm7/linux-centos-vault/7.8.2003/sclo/x86_64/rh/Packages/d/devtools…...
结构体structure、共用体union
目录 结构体 结构体类型的定义形式 结构体类型的大小 内存计算例子 共用体union 用共用体判断大小端 结构体和共用体对比 qsort() 结构体 结构体类型——用来描述复杂数据的一种数据类型 构造类型(用户自定义类型) struc…...
Spring自动注册-<bean>标签和属性解析
xml文件中最常见也最核心的就是<bean>,<Import>,<beans>,<alias>标签,关于它们的解析主要是BeanDefinitionParserDelegate类中.<bean>标签的解析最为复杂和重要. <bean>标签 processBeanDefinition(ele, delegate)方法中,主要是是对…...
【仿RabbitMQ消息队列】基于C++11中packaged_tack异步线程池
目录 什么是同步和异步? future 使用future和async配合管理异步任务 使用promise和future配合管理异步任务 使⽤std::packaged_task和std::future配合 C11异步线程池 什么是同步和异步? 同步(Synchronous) 同步编程是指程…...
免费下载专利
给大家提供一个可以免费下载专利的地方 链接:https://www.drugfuture.com/cnpat/cn_patent.asp...
CentOS7安装流程步骤详细教程
1. 简介 1.1. 概述 CentOS 7是一款基于Red Hat Enterprise Linux(RHEL)的开源Linux发行版,它提供了一个稳定、安全、高效的操作系统,适用于企业级应用、服务器、云计算等领域。CentOS 7以其高度的稳定性和安全性而闻名,它广泛应用于各种行业和领域,包括政府、金融、医疗、…...
【大模型从入门到精通17】openAI API 构建和评估大型语言模型(LLM)应用5
这里写目录标题 理论问题:实践问题:理论实践 理论问题: 1.描述评估LLM应用程序输出的重要性,并提及至少三个维度,这些输出应该在这几个维度上被评估。 2.解释在评估LLM应用程序时开发稳健的性能指标的作用,…...
苹果手机无iCloud备份下“最近删除”照片的恢复策略
iPhone最近删除清空了照片还能恢复吗?大家都知道,照片对于我们来说是承载着美好回忆的一种形式。它记录着我们的平淡生活,也留住了我们的美好瞬间,因此,具有极其重要的纪念价值。但由于我们的失误操作导致照片被删除&a…...
Docker搭建Minio容器
Docker搭建Minio容器 前言 在上一集我们介绍了分布式文件存储行业解决方案以及技术选型。最终我们决定选用Minio作为分布式文件存储。 那么这集我们就在Docker上搭建Minio容器即可。 Docker搭建Minio容器步骤 创建Minio文件目录 我们选择创建/minio/data目录 修改目录权…...
【C++】多源BFS问题和拓扑排序
目录 多源BFS介绍 单源BFS和多源BFS的区别 SO如何解决多源BFS问题 多源之核心 矩阵 算法思路 代码实现 飞地的数量 算法思路 代码实现 地图中的最高点 算法思路 代码实现 地图分析 算法思路 代码实现 拓扑排序介绍 有向无环图 编辑 如何解决这类问题 课…...
CentOS 7 安装详细教程
大家好,我是程序员小羊! 前言: CentOS 7 是一个稳定的企业级 Linux 发行版,广泛用于服务器环境。CentOS 7 是基于 Red Hat Enterprise Linux (RHEL) 构建的企业级 Linux 发行版,提供免费的、开源的操作系统…...
mybatis-plus + springboot 多对多实例
在MyBatis Plus中,自动填充数据是一种非常实用的功能,它可以自动地为一些字段设置默认值,比如创建时间和更新时间。对于多对多关系来说,虽然自动填充主要针对单一实体的字段,但在某些情况下,你可能也需要在…...
Xinference-v1.17.1快速部署Web应用:Flask集成指南
Xinference-v1.17.1快速部署Web应用:Flask集成指南 1. 引言 想给自己的AI模型快速搭建一个Web界面吗?今天咱们就来聊聊怎么把Xinference-v1.17.1这个强大的AI推理引擎集成到Flask Web应用中。不需要复杂的架构设计,也不用担心API对接问题&a…...
Fish Speech 1.5企业培训场景:员工手册/安全规范自动语音化部署
Fish Speech 1.5企业培训场景:员工手册/安全规范自动语音化部署 1. 企业培训的语音化需求 在现代企业培训中,员工手册和安全规范的学习往往面临一个普遍问题:文字材料枯燥乏味,员工阅读积极性不高。传统的纸质手册或电子文档需要…...
StructBERT中文相似度模型实战案例:中文在线教育题库去重与难度映射系统
StructBERT中文相似度模型实战案例:中文在线教育题库去重与难度映射系统 1. 项目背景与价值 在线教育平台每天都会产生大量的题目资源,但随之而来的是题库重复、难度标注不一致等问题。传统的人工审核方式效率低下,且容易出错。StructBERT中…...
Unity IL2CPP热更新实战:如何通过跳板动态库实现无感知代码替换
Unity IL2CPP热更新实战:跳板动态库与元数据替换的工程实践 在移动游戏开发领域,热更新技术已经成为项目维护的标配能力。对于使用Unity IL2CPP后端的中大型项目,传统的C#热更方案往往束手无策。本文将深入探讨一种基于动态库替换的IL2CPP热更…...
别再手动删缓存了!Nginx缓存配置实战:从proxy_cache到purge模块的完整避坑指南
Nginx缓存自动化管理实战:从基础配置到智能清除的进阶之路 引言:为什么我们需要更优雅的缓存管理? 每次手动清理服务器缓存目录时,你是否会感到一丝不安?那种直接操作文件系统的粗暴方式,就像用手术刀切西瓜…...
Qwen3.5-4B-Claude-Opus部署教程:llama-server内核+FastAPI外层封装架构解析
Qwen3.5-4B-Claude-Opus部署教程:llama-server内核FastAPI外层封装架构解析 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该…...
LightSeq多精度推理性能深度对比:fp16与int8在不同硬件平台上的终极表现
LightSeq多精度推理性能深度对比:fp16与int8在不同硬件平台上的终极表现 【免费下载链接】lightseq LightSeq: A High Performance Library for Sequence Processing and Generation 项目地址: https://gitcode.com/gh_mirrors/lig/lightseq LightSeq作为字节…...
金融量化分析的革命:GS Quant如何重塑华尔街的交易智慧
金融量化分析的革命:GS Quant如何重塑华尔街的交易智慧 【免费下载链接】gs-quant 用于量化金融的Python工具包。 项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant 想象一下,你是一位对冲基金的量化分析师,每天需要处理数…...
【全身灵巧操作:3D扩散策略、力自适应与接触显式学习】第六章 从人类视频学习操作技能
目录 第六章 从人类视频学习操作技能 6.1 人类视频学习的动机与挑战 6.1.1 传统示范学习的瓶颈 6.1.2 人类视频作为学习源的优势 6.1.3 核心挑战:视角、遮挡与动态 6.2 DexMan框架:从视频到双臂操作 6.2.1 手部-物体姿态估计 6.2.2 基于接触奖励的策略优化 6.2.3 仿…...
3种破解方案:QMCDecode让QQ音乐加密格式限制成为历史
3种破解方案:QMCDecode让QQ音乐加密格式限制成为历史 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…...
