【JavaWeb】MySQL约束、事务、多表查询
1 约束
| PRIMARY KEY | 主键约束 |
| UNIQUE | 唯一约束 |
| NOT NULL | 非空约束 |
| DEFAULT | 默认值约束 |
| FOREIGN KEY | 外键约束 |
主键
主键值必须唯一且非空;每个表必须有一个主键
建表时主键约束
CREATE TABLE 表名 (字段名 字段类型 PRIMARY KEY,字段名 字段类型
);CREATE TABLE 表名(列名 数据类型,[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);

建表后单独添加主键
ALTER TABLE 表名 ADD PRIMARY KEY (字段名);
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
主键自增
在每次插入新数据时,数据库自动生成主键字段的值(字段类型必须是数值类型)
建表时:
CREATE TABLE 表名 (字段名 字段类型 PRIMARY KEY AUTO_INCREMENT,字段名 字段类型
);
自增字段在省略字段名插入时,可以给个表中没有的主键数值,也可以用null做占位符,如果没有占位,直接省略不写会报错
修改自动增长的开始值
ALTER TABLE 表名 AUTO_INCREMENT = 要修改的数值;
唯一约束
唯一约束作用:让字段值唯一,不能重复
CREATE TABLE 表名 (字段名 字段类型 UNIQUE,字段名 字段类型
);
非空约束作用:让字段值不能为null
CREATE TABLE 表名 (字段名 字段类型 NOT NULL,字段名 字段类型
);
默认值约束作用:如果这个字段不设置值,用默认值
CREATE TABLE 表名 (字段名 字段类型 DEFAULT 值,字段名 字段类型
);
主键时唯一且非空,约束也可以唯一且非空区别:主键一个表只有一个,约束可以约束多个键
外键
外键:一个表中的引用其它表中的主键的字段
CREATE TABLE 表名 (字段名 字段类型,字段名 字段类型,-- 添加外键约束CONSTRAINT 外键约束名 FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名)
);
- CONSTRAINT: 表示约束外键约束名,给外键约束取个名字,将来通过约束名可以删除这个约束
- FOREIGN KEY(外键字段名): 指定某个字段作为外键
- REFERENCES 主表(主键字段名) : 引用主表的主键的值
在存在的表添加外键约束([]内可以省略不写)
ALTER TABLE 从表 ADD [CONSTRAINT 外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名);

删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
2 事务
-- 开启事务
START TRANSACTION; 或者 BEGIN;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
事务特性
| 原子性(Atomicity) | 事务是不可分割的最小操作单位,要么同时成功,要么同时失败。 |
| 一致性(Consistency) | 事务前后数据的完整性必须保持一致。 |
| 隔离性(Isolation) | 是指多个事务并发访问数据库时,一个事务不能被其它的事务所干扰,多个并发事务之间数据要相互隔离,不能相互影响。 |
| 持久性(Durability) | 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 |
默认事务是自动提交的
-- 查看MySQL是否开启自动提交事务
SELECT @@autocommit;-- 关闭自动提交事务
set autocommit = 0;
3 多表查询
内连接:不显示不满足条件的数据
隐式内连接
SELECT 字段列表 FROM 表1 [别名],表2 [别名]… WHERE 条件;

显示内连接(INNER JOIN ... ON)
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
select * from 表1 inner join 表2 on 表连接条件 where 查询条件;
外连接
左外连接:查询出满足条件的数据和表1其余数据
左外连接:查询出满足条件的数据和表2其余数据
--左外连接格式
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表连接条件 WHERE 查询条件;
--右外连接格式
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表连接条件 WHERE 查询条件;
子查询
先执行子查询,将子查询的结果作为父查询的一部分
in; not in; exists
SELECT 查询字段 FROM 表 WHERE 条件;
--例子,单行单列,括号里面是子查询
SELECT * FROM employee WHERE salary=(SELECT MAX(salary) FROM employee);
-- 多行单列,多行数据但是查询的是同一列 in/any/all
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
--多行多列,from后是子查询
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
多行单列


多行多列
-- aaa是子查询数据的别名
select * from (select * from Student where age >= 18) aaa left outer join class on aaa.classid = class.id

相关文章:
【JavaWeb】MySQL约束、事务、多表查询
1 约束 PRIMARY KEY 主键约束 UNIQUE 唯一约束 NOT NULL 非空约束 DEFAULT 默认值约束 FOREIGN KEY 外键约束 主键 主键值必须唯一且非空;每个表必须有一个主键 建表时主键约束 CREATE TABLE 表名 (字段名 字段类型 PRIMARY KEY,字段名 字段类型 );CR…...
【并发编程】自研数据同步工具优化:创建线程池多线程异步去分页调用其他服务接口获取海量数据
文章目录 场景:解决方案 场景: 前段时间在做一个数据同步工具,其中一个服务的任务是调用A服务的接口,将数据库中指定数据请求过来,交给kafka去判断哪些数据是需要新增,哪些数据是需要修改的。 刚开始的设…...
七、dokcer-compose部署springboot的jar
1、准备 打包后包名为 ruoyi-admin.jar 增加接口 httpL//{ip}:{port}/common/test/han #环境变量预application.yml 中REDIS_HOSTt的值,去环境变量去找;如果找不到REDIS_HOST就用myredis 1、Dockerfile FROM hlw/java:8-jreRUN ln -sf /usr/share/z…...
k8s 使用 containerd 运行时配置 http 私服
简介 Kubernetes 从 v1.20 开始弃用 Docker,并推荐用户切换到基于容器运行时接口(CRI)的容器引擎,如 containerd、cri-o 等。 目前使用的环境中使用了 Kubernetes v1.22.3,containerd 1.4.3,containerd 在…...
【新品发布】ChatWork企业知识库系统源码
系统简介 基于前后端分离架构以及Vue3、uni-app、ThinkPHP6.x、PostgreSQL、pgvector技术栈开发,包含PC端、H5端。 ChatWork支持问答式和文档式知识库,能够导入txt、doc、docx、pdf、md等多种格式文档。 导入数据完成向量化训练后,用户提问…...
疫情打卡 vue+springboot疾病防控管理系统java jsp源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 疫情打卡 vuespringboot 系统有1权限:管理…...
python --连接websocket
如果只是模拟js端发送接收的话,已经有了websocket server的话,只有client就好了 pip install websocket-client#-*- encoding:utf-8 -*-import sys sys.path.append("..") from socket import * import json, time, threading from websocket…...
数据库内日期类型数据大于小于条件查找注意事项
只传date格式的日期取查datetime的字段的话默认是 00:00:00 日期类型字符串需要使用 ’ ’ 单引号括住 使用大于小于条件查询某一天的日期数据 前后判断条件不能是同一天 一个例子 数据库内数据: 查询2023-08-14之后的数据: select * from tetst…...
网易有道押宝大模型,打响智能硬件突围战
本文转载自产业科技 自今年开年以来,AI大模型这场火势能不减,如今已燃到教育领域。 7月26日,网易有道举办了“powered by子曰”教育大模型应用成果发布会,推出国内首个教育领域垂直大模型“子曰”,并一口气发布了基于…...
KAFKA第二课之生产者(面试重点)
生产者学习 1.1 生产者消息发送流程 在消息发送的过程中,涉及到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到K…...
Mybatis 源码 ∞ :杂七杂八
文章目录 一、前言二、TypeHandler三、KeyGenerator四、Plugin1 Interceptor2 org.apache.ibatis.plugin.Plugin3. 调用场景 五、Mybatis 嵌套映射 BUG1. 示例2. 原因3. 解决方案 六、discriminator 标签七、其他1. RowBounds2. ResultHandler3. MapKey 一、前言 Mybatis 官网…...
堆的实现以及应用
💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注&…...
MySql011——检索数据:过滤数据(使用正则表达式)
前提:使用《MySql006——检索数据:基础select语句》中创建的products表 一、正则表达式介绍 关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》,这里就不再累赘。 二、使用MySQL正则表达式 2.1、基本字符匹配 检索…...
数据结构与算法-栈(LIFO)(经典面试题)
一:面试经典 1. 如何设计一个括号匹配的功能?比如给你一串括号让你判断是否符合我们的括号原则, 栈 力扣 2. 如何设计一个浏览器的前进和后退功能? 思想:两个栈,一个栈存放前进栈&…...
NSI45030AT1G LED驱动器方案为汽车外部及内部照明恒流稳流器(CCR)方案
关于线性恒流调节器(CCR):是一种用于控制电流的稳定输出。它通常由一个功率晶体管和一个参考电流源组成。CCR的工作原理是通过不断调节功率晶体管的导通时间来维持输出电流的恒定。当输出电流超过设定值时,CCR会减少功率晶体管的导…...
uni-app中使用pinia
目录 Pinia 是什么? uni-app 使用Pinia main.js 中引用pinia 创建和注册模块 定义pinia方式 选项options方式 定义pinia 页面中使用 pinia选项options方式 函数方式 定义pinia 页面中使用 函数方式 定义的pinia Pinia 是什么? Pinia࿰…...
Spring之事务管理
文章目录 前言一、事务及其参数含义1.事务的四个特性2.事务的传播行为(propagation)3.事务隔离性4.事务的隔离级别(ioslation)5.timeout(超时)6.readOnly(是否只读)7.rollbackFor&am…...
linux常见的mysql问题
当涉及到MySQL在Linux系统上的常见问题时,以下是10个经常遇到的问题及其解答: 无法连接到MySQL服务器。 确保MySQL服务器正在运行:可以使用systemctl status mysql或service mysql status命令检查MySQL服务状态。确保MySQL服务器网络设置正确…...
常见分辨率时序信息
分辨率列表 分辨率一:640x480(逐行) 分辨率二:800x600(逐行) 分辨率三:1024x768(逐行) 分辨率四:大名鼎鼎720P(逐行) 注:选择720P@30帧的,需拉长HOR TOTAL TIME 分辨率五:1280x800(逐行) 分辨率六:1280x960(逐行...
机器人CPP编程基础-05完结The End
非常不可思议……之前四篇博文竟然有超过100的阅读量…… 此文此部分终结,没有继续写下去的必要了。 插入一个分享: 编程基础不重要了,只要明确需求,借助AI工具就能完成一个项目。 当然也不是一次成功,工具使用也需要…...
ModTheSpire终极指南:安全加载杀戮尖塔模组的5大步骤
ModTheSpire终极指南:安全加载杀戮尖塔模组的5大步骤 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的Java游戏模组加载器…...
3分钟搞定学期教材:中小学智慧教育平台电子课本下载全攻略 [特殊字符]
3分钟搞定学期教材:中小学智慧教育平台电子课本下载全攻略 📚 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本…...
League Akari:英雄联盟玩家的终极智能助手工具包
League Akari:英雄联盟玩家的终极智能助手工具包 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟游戏中的繁琐操作而…...
3步解锁Heightmapper:从地图到3D地形的终极转换指南
3步解锁Heightmapper:从地图到3D地形的终极转换指南 【免费下载链接】heightmapper interactive heightmaps from terrain data 项目地址: https://gitcode.com/gh_mirrors/he/heightmapper 还在为寻找真实地形数据而烦恼吗?还在为3D建模中的地形…...
再论观点“C++是否应避免使用普通指针,而使用智能指针(包括shared,unique,weak)”
再论观点“C是否应避免使用普通指针,而使用智能指针(包括shared,unique,weak)” PS:笔者这次投稿的问题是:https://www.zhihu.com/question/319277442。老规矩,顺手投稿的问题&…...
Oracle误操作先别慌:Flashback、UNDO、回收站、Redo 与归档日志一次讲清楚 2026-05-24
1、背景说明本文整理 Oracle 生产环境中误操作恢复相关的核心知识点,包括:Flashback Database Flashback Query UNDO Recycle Bin FRA 快速恢复区 Redo Archived Redo Log 归档日志适用于 Oracle 单实例、RAC,以及 CDB/PDB 多租户环境。在 CD…...
LoRA微调实战2026:从零到生产的完整工程指南
为什么2026年LoRA仍然是最重要的微调方法 大模型微调技术日新月异,但LoRA(Low-Rank Adaptation)自2021年提出以来,不仅没有被淘汰,反而在2026年成为工业界微调的主流方法之一。原因很简单:极致的参数效率。…...
别再让Ubuntu卡成PPT了!手把手教你调整Swap分区大小(从1G到64G实战)
Ubuntu性能优化实战:科学配置Swap分区解决系统卡顿当你在Ubuntu上同时运行多个虚拟机、编译大型项目或处理海量数据时,是否经历过系统突然变得异常缓慢,甚至出现程序无响应的情况?这种"卡成PPT"的体验往往不是物理内存不…...
保姆级教程:用CellChat v2 R包分析10x Visium空间转录组数据,手把手搞定细胞通讯网络
空间转录组细胞通讯分析全流程:从CellChat v2安装到高级可视化空间转录组技术正在彻底改变我们对组织微环境的理解,而细胞间通讯分析则是解锁组织功能奥秘的关键钥匙。作为一名刚接触10x Visium数据的生物信息学研究者,你可能已经完成了基础的…...
5步解决Windows包管理器Winget安装难题:专业修复指南
5步解决Windows包管理器Winget安装难题:专业修复指南 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi/w…...
