JavaWeb合集06-MySQL数据库

news2024/12/28 8:18:08

六、MySQL数据库

关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

特点:

使用表存储数据,格式统一, 便于维护.

使用SQL语言操作,标准统一,使用方便,可用于复杂查询。

1、SQL语句

SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。

通用语法:

SQL语句可以单行或多行书写,多行书写要用逗号结尾,最后以分号结尾。

SQL语句可以使用空格/缩进来增强语句的可读性。

MySQL数据库的SQL语句不区分大小写。

注释:

  1. 单行注释:–注释内容或#注释内容(MySQL特有)
  2. 多行注释::/* 注释内容*/

SQL语句通常分为四大类:

分类全称说明
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户、控制数据库的访问权限

在这里插入图片描述

2、数据库设计-DDL

DDL英文全称是Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表)。

2.1 数据库操作

在这里插入图片描述

上述语法中的database,也可以替换成schema。 如: create schema db01;

2.2 数据库图形化操作软件DataGrip是JetBrains

介绍::DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、 PostgreSQL的理想解决方案。

注意:idea里面已经集成的DataGrip的功能,因为idea也是JetBrains旗下的软件;

官网: https:/ /www.jetbrains.com/ zh-cn/ datagrip/

2.3 在idea中操作DataGrip的步骤:

1、在idea的右侧点击database。

2、点击Data Source,选择自己要创建的数据库类型。

在这里插入图片描述

3、第一次操作注意要下载对应驱动。

在这里插入图片描述

4、界面展示

在这里插入图片描述

2.4 表结构的操作

在这里插入图片描述

2.5 修改表结构

在这里插入图片描述

3、 DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

3.1 插入数据(insert)

在这里插入图片描述

1.插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
2.字符串和日期型数据应该包含在引号中。
3.插入的数据大小,应该在字段的规定范围内。

3.2 修改数据(update)

修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

在这里插入图片描述

3.3 删除数据(delete)

DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

DELETE语句不能删除某一个字 段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。

在这里插入图片描述

4、 DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。

在这里插入图片描述

4.1 DQL-基本查询

在这里插入图片描述

*号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)

4.2 DQL 条件查询

)

4.3 分组查询

聚合函数

在这里插入图片描述

注意:null不参与任意的统计函数

select count(*) from  user;  #统计user表单数据总数
#查询user表中的sex字段,对其进行分组,并统计各自的数量
select  sex,count(*)  from user group by  sex;

在这里插入图片描述

having 函数后可以写聚合函数的条件

在这里插入图片描述

where与having区别:

1.执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

2.判断条件不同: where不 能对聚合函数进行判断,而having可以。

注意事项

1、分组之后, 查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

2、执行顺序: where >聚合函数> having。

4.4 排序查询

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意事项:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

4.5 分页查询

在这里插入图片描述

注意事项

  1. 起始索引从0开始,起始索引= (查询页码- 1) *每页显示记录数。
  2. 分页 查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  3. 如果查询的是第 一页数据,起始索引可以省略,直接简写为limit 10。
4.5 报表数据查询

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5、多表设计

概念:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)、多对多、一对一

5.1 一对多关系

需求:根据页面原型及需求文档,完成部门及员工模块的表结构设计。(一个部门有多个员工,一个员工只属于一个部门)

直接在员工表中添加一个所属部门字段,记录部门表的ID。

5.1.1 多表链接-外键

多表问题分析:部门数据可以直接删除,然而还有部分员工归属于该部门下,此时就出现了数据的不完整、不一致问题(所属部门的员工还在)。目前上述的两张表,在数据库层面,并未建立关联,所以是无法保证数据的一致性和完整性的。

作用:当父表的数据要被删除时会检查子表中是否有父表对应外键字段的值,如果有就不能删除,必须将子表里面的关联父表字段的数据全部删除才能删除父表的字段。

#外键约束-语法

#创建表时指定
create table 表名(
 字段名数据类型,
[constraint] [外键名称] foreign key (外键字段名) references 主表(字段名)
);


#建完表后,添加外键
alter table  表名 add constraint 外键名称 foreign key (外键字段名) references 主表(字段名); 

物理外键的缺点( 用 foreign key 添加的外键 ):

  1. 影响增、删、改的效率(需要检查外键关系)。
  2. 仅用于单节点数据库,不适用与分布式、集群场景。
  3. 容易引发数据库的死锁问题,消耗性能。

通常使用的都是逻辑外键:

在业务层逻辑中,解决外键关联。通过逻辑外键,就可以很方便的解决上述问题。

5.2 一对一关系

场景:用户与身份证信息的关系

关系::一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中, 其他字段放在另一张表中,以提升操作效率。

实现:在任意一方加入外键, 关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

在这里插入图片描述

5.3 多对多关系

场景:学生与课程的关系。
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择。

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

在这里插入图片描述

6、多表查询

多表查询:指从多张表中查询数据。

笛卡尔积:笛卡尔乘积是指在数学中,两个集合(A集合和B集合)的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)

6.1 多表查询分类

连接查询

内连接:相当于查询A表、B表交集部分数据

左外连接: 查询左表所有数据(包括两张表交集部分数据)

右外连接: 查询右表所有数据(包括两张表交集部分数据)

子查询:查询里面嵌套查询。

6.1 内连接查询

相当于查询A表、B表交集部分数据。

在这里插入图片描述

 #隐式内连接查询
 select  tb_user.email,tb_links.email,tb_user.nick_name,tb_links.url_name  from tb_user,tb_links where tb_user.email=tb_links.email;
 
 #可以通过as或者直接给表取别名,取完别名后就只能用 别名.字段名来访问对应的字段
  select  tu.email,tl.email,tu.nick_name,tl.url_name  from tb_user tu,tb_links tl where tu.email=tl.email;
 
 #显式内连接查询
  select  tb_user.email,tb_links.email,tb_user.nick_name,tb_links.url_name  from tb_user  join tb_links on tb_user.email=tb_links.email;
6.2 外连接

左外连接: 查询左表所有数据(包括两张表交集部分数据)

右外连接: 查询右表所有数据(包括两张表交集部分数据)

在这里插入图片描述

#查询 tb_user表的全部数据,并且查询tb_links的email字段与tb_user表的emai字段值对应的数据
select  tu.email,tu.nick_name,tl.email,tl.url_name  from tb_user tu  left join tb_links tl on tu.email=tl.email;
6.3 子查询

介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。

形式:select * from t1 where column1 = ( select column1 from t2 … );

子查询外部的语句可以是insert / update / delete / select的任何一个,最常见的是select。

分类:

  1. 标量子查询:子查询返回的结果为单个值
  2. 列子查询:子查询返回的结果为一列,但可以多行
  3. 行子查询:子查询返回的结果为一行,但可以多列
  4. 表子查询:子查询返回的结果为多行多列
6.3.1 标量子查询

子查询返回的结果是单个值 (数字、字符串、日期等) ,最简单的形式

常用的操作符:= 、<> 、>、>= 、<、<=

在这里插入图片描述

在这里插入图片描述

6.3.2 列子查询

子查询返回的结果是一列(可以是多行)

常用的操作符: in、not in等

在这里插入图片描述

6.3.3 行子查询

子查询返回的结果是一行(可以是多列)。

常用的操作符:=、<>、in、not in

在这里插入图片描述

6.3.4 表子查询

子查询返回的结果是多行多列,常作为临时表

常用的操作符:in

在这里插入图片描述

7、多表查询案例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7、事务

定义:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败(多条语句同时执行,要么一起成功,要么一起失败)。

场景:学工部整个部门门解散了,该部门及部门下的员工都需要删除了。如果删除部门成功了,而删除该部门的员工时失败了,就造成了数据的不一致。这时就要用到事务来解决。

注意:默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句, MySQL会立即隐式的提交事务。

7.1 事务操作

开启事务:start transaction; 或 begin;

提交事务:commit; (将操作进行提交,只要事务没有提交,当前事务的数据是不会改变的,但是其它事务的数据已经发生了改变,只有当前事务的全部语句执行成功才执行它)

回滚事务:rollback; (如果失败,就将数据恢复到原样)

在这里插入图片描述

7.2 事务的四大特性(ACID)
  1. 原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败。
  2. 一致性:事务完成时,必须使所有的数据都保持一致状态。
  3. 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  4. 持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

8、索引

定义:索引(index)是帮助数据库高效获取数据的数据结构。

无索引的查询方式:进行一条一条的全表扫描。

有索引的查询方式:通过树型结构来存储数据,就像通过目录来查询数据。

在这里插入图片描述

索引的优缺点:

  • 优点:提高数据查询的效率,降低数据库的IO成本。通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
  • 缺点:索引会占用存储空间。索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。
8.1 索引结构

MySQL数据库支持的索引结构有很多,如: Hash索引、 B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的B+Tree结构组织的索引。

在这里插入图片描述

8.2 索引的语法

在这里插入图片描述

#创建:为tb_emp表的name字段创建一个索引
create  index idx_emp_name  on  tb_emp(name);

#查询:查询tb_emp表的索引信息
show  index  from tb_emp;

#删除:删除tb_emp表的name字段的索引
drop  index  idx_emp_name   on  tb_emp;

注意事项:

  1. 主键字段,在建表时,会自动创建主键索引。
  2. 添加唯一约束时,数据库实际上会添加唯一索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js中map,filter,find,foreach的用法介绍

js中map&#xff0c;filter&#xff0c;find&#xff0c;foreach的用法介绍 在 JavaScript 中&#xff0c;数组提供了一些常用的迭代方法&#xff0c;如 map、filter、find 和 forEach&#xff0c;这些方法允许你对数组中的每个元素进行操作&#xff0c;下面是它们的用法和区别…

用示波器观测RC一阶电路零输入响应是否激励必须是方波信号

概述 RC一阶电路是一种简单但非常重要的电路&#xff0c;广泛应用于滤波、信号处理和时间常数分析等领域。在研究RC电路的动态特性时&#xff0c;零输入响应&#xff08;Natural Response&#xff09;是一项关键内容。本文将详细解析用示波器观测RC一阶电路零输入响应时&#…

基于 MyBatis Plus 分页封装分页方法

一、前言 作为一个 CRUD 工程师&#xff0c;查询必然少不了&#xff0c;分页查询更是常见&#xff0c;市面上也有很多成熟的分页插件&#xff0c;都各有优缺点&#xff0c;这里整理一下&#xff0c;基于 MybatisPlus 的分页插件进一步封装分页的公共方法。 二、对象封装 其实…

elementUI,设置日期,只能选择过去的和今天的日期

在 el-date-picker 组件中加&#xff1a;:picker-options"pickerOptions" <el-form-item label"票据生成日期&#xff1a;"> <el-date-picker v-model"date1" type"daterange" range-separator"至" value-format&…

Webpack 完整指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack介绍 目录 介绍 一、webpack 1.1、webpack是什么 1.2 webpack五个核心配置 1.…

学习threejs,拉伸几何体THREE.TubeGeometry管道

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️拉伸几何体THREE.TubeGeome…

医护人员排班|基于springBoot的医护人员排班系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息…

js 对网页表格内容进行全选

起因&#xff0c; 目的: 需要从一个数据库&#xff0c;手动选取数据&#xff0c;而且这个网页没有全选按钮&#xff0c;只能一个一个点&#xff0c;很烦。 所以写了一个简单的 js 脚本&#xff0c; 一键全选。 过程: 代码 1 function clickAllBoxes() {const checkboxes do…

HarmonyNext保存Base64文件到Download下

本文介绍如何保存Base64的文件到Download下 参考文档地址&#xff1a; 保存用户文件-Harmony Next 用到的是DOWNLOAD模式保存文件 用户在使用save接口时&#xff0c;可以将pickerMode配置为DOWNLOAD模式&#xff0c;该模式下会拉起授权接口&#xff0c;用户确认后会在公共路径…

ChatGPT丨R语言在生态环境数据统计分析、绘图、模型中的应用

第一单元&#xff1a;生态环境数据统计概述 1.1 生态环境数据特点及统计方法介绍 1&#xff0e;生态环境数据复杂性和多样性 2&#xff0e;生态环境数据类型及分布特点 3&#xff0e;生态环境数据主要统计分析方法及统计检验&#xff08;t-检验、F检验、卡方检验&#xff0…

PostgreSQL Windows系统初始化、登录、创建用户及数据库

文章目录 PostgreSQL初始化PostgreSQL登录 PostgreSQL初始化 initdb 到安装目录下&#xff0c;找到目录E:\postgresql\bin&#xff08;自己的安装目录&#xff09;&#xff0c;在该目录下使用管理员方式打开cmd窗口。 initdb.exe -D "E:\postgresql\bin" E:\postgre…

车载软件架构---软件定义汽车的复杂性

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

闹钟、绘制与TCP

闹钟 pro文件&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimer> #include<QTime> #include<QDebug> #include<QTimerEvent> #include<QDateTime> #include<QTextToSpeech> #i…

sql-labs靶场第十五关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

65.DDR3读写控制器的设计与验证(2)

&#xff08;1&#xff09;写FIFO和读FIFO的配置 &#xff08;2&#xff09;AXI接口写入控制代码&#xff1a; module axi_master_write (//全局变量input wire ACLK , //全局时钟input wire ARESETN , …

AI工具推荐合集

在数字化时代&#xff0c;AI工具的出现极大地改变了我们的工作和生活方式。无论是学术研究、创意设计还是日常写作&#xff0c;这些工具都能提供强大的支持。以下是一些值得推荐的AI工具&#xff0c;帮助您提高效率与创造力。 1. 包阅AI 官网链接: 包阅AI 包阅AI是一款智能A…

哪吒汽车的工资到底发没发?

联网圈第一预言家&#xff0c;也就是美团的王兴&#xff0c;早在新能源热钱最多的那几年就预言&#xff0c;未来中国汽车格局大概率是「3333」。 也就是3家央企、3家地方国企、3家民企和3家新势力…… 此言论一出&#xff0c;当时可以说惹急了很多车企&#xff0c;比如已经退…

Leetcode—1115. 交替打印 FooBar【中等】(多线程)

2024每日刷题&#xff08;180&#xff09; Leetcode—1115. 交替打印 FooBar C实现代码 class FooBar { private:int n;sem_t fooSem;sem_t barSem;public:FooBar(int n) {this->n n;sem_init(&fooSem, 0, 1);sem_init(&barSem, 0, 0);}~FooBar() {sem_destroy(&…

ARINC 429总线协议

一、概述 ARINC 是美国航空无线电公司英文字头的缩写&#xff0c; 该公司1977年7月21日出版了“ARINC 429规范”一书&#xff0c;429规范就是飞机电子系统之间数字式数据传输的标准格式&#xff0c;在飞机上使用429总线的电子设备均应遵守这个规范&#xff0c;这样才能保证电子…

Debug-029-el-table实现自动滚动分批请求数据

前情提要 最近做了一个小优化&#xff0c;还是关于展示大屏方面的。大屏中使用el-table展示列表数据&#xff0c;最初的方案是将数据全部返回&#xff0c;确实随着数据变多有性能问题&#xff0c;有时请求时间比较长。这里做的优化就是实现列表的滚动到距离底部一定高度时再次请…