(十三)JavaWeb后端开发——MySQL2

devtools/2024/11/14 0:33:06/

目录

1.DQL数据查询语言

1.1基本查询

1.2条件查询 where关键字

 1.3分组查询

1.4排序查询

1.5分页查询

2.多表设计

3.多表查询——联查

4.多表查询——子查询​

5.MySQL 事务 

6.事务管理(事务进阶)

7.MySQL 索引


1.DQL数据查询语言

分为五大基本查询语法

1.1基本查询

sql">-- 查询特定字段
select name,entrydate from tb_emp;
-- 查询所有字段
select * from tb_emp;
-- 查询所有员工的 name,entrydate,并起别名(姓名、入职日期)
select name '姓名',entrydate '入职日期' from tb_emp;
-- 查询已有的员工关联了哪几种职位(不要重复)
select distinct job from tb_emp;

1.2条件查询 where关键字

sql">select * from tb_emp where name = '陈友谅';
select * from tb_emp where job is null;

 1.3分组查询

首先需要知道一个知识点:聚合函数,就是对某一列的数据所作的操作

sql">select count(id) from tb_emp;
select count(job) from tb_emp;
-- 通配符*计算总数据量
select count(*) from tb_emp;
-- 统计最早入职的员工
select min(entrydate) from tb_emp;

例:先査询入职时间在'2015-01-01'(包含)以前的员工,并对结果根据职位(job)分组 ,获取员工数量大于等于2的职位

sql">select job,count(*) from tb_emp where entrydate <= '2015-01-01' 
group by job having count(*) >= 2;

where与having区别:

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  2. 判断条件不同:where不能对聚合函数进行判断,而having可以

1.4排序查询

排序方式:ASC升序(默认值)、DESC降序

sql">-- 默认升序
select * from tb_emp order by entrydate;
-- 降序
select * from tb_emp order by entrydate desc ;
-- 多个排序字段
select * from tb_emp order by entrydate, update_time desc;

1.5分页查询

sql">-- 从 起始索引0 开始査询员工数据,每页展示5条记录
select * from tb_emp limit 0, 5;

2.多表设计

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

  • 一对多(多对一)
  • 多对多
  • 一对一

但是目前上述的两张表,在数据库层面,并未建立关联,所以是无法保证数据的一致性和完整性,比如说我在部门表中把“教研部”删除,员工表中教研部的员工依然存在,这显然是不合理的,所以就需要“外键约束

3.多表查询——联查

如果单纯执行下面的指令会出现问题——笛卡尔积

sql">-- 多表查询
select * from tb_emp, tb_dept;

要解决这个问题只需要令员工的部门id = 部门主键id即可

sql">select * from tb_emp, tb_dept where  tb_emp.dept_id = tb_dept.id;

左外连接完全包含左表数据,右外连接完全包含右表数据

4.多表查询——子查询

5.MySQL 事务 

sql">-- 事务
-- 删除部门
delete from tb_dept where id = 3;
-- 删除部门下的员工
delete from tb_emp where dept_id = 3;

在上面的代码中,删除部门成功了,但是删除该部门下的员工失败了,就是因为这两个操作分属两个事务,解决办法是把这两个操作控制在一个事务内

sql">-- 开启事务
start transaction ;
-- 删除部门
delete from tb_dept where id = 3;
-- 删除部门下的员工
delete from tb_emp where dept_id = 3;
-- 提交事务
commit ;
-- 回滚事务
rollback ;

6.事务管理(事务进阶)

如果在一个a事务中,需要开启另一个事务,那么这两个事务的关系是怎样的呢?这就涉及到了事务的传播行为

7.MySQL 索引

使用普通的sql查询语言效率很低,比如在600w的数据量里查询数据往往需要十几秒的时间,索引能大幅提高查询效率

索引(index)是帮助数据库高效获取数据的数据结构(底层实现是二叉搜索树)

优点:

  • 提高数据查询的效率,降低数据库的IO成本
  • 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗

缺点:

  • 索引会占用存储空间,
  • 索引大大提高了查询效率,同时却也降低了insert、update、delete的效率


http://www.ppmy.cn/devtools/133314.html

相关文章

SpringBoot框架:共享汽车行业的技术革新

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了共享汽车管理系统的开发全过程。通过分析共享汽车管理系统管理的不足&#xff0c;创建了一个计算机管理共享汽车管理系统的方案。文章介绍了共享汽车管理系统的系…

《Atomic Picnic》进不去游戏解决方法

Atomic Picnic有时候会遇到进不去游戏的情况&#xff0c;这可能是由多种原因造成的&#xff0c;玩家可以采取很多解决方法&#xff0c;比如检查电脑配置、更新系统和驱动或验证游戏文件。 Atomic Picnic进不去游戏怎么办 检查电脑配置 查看自己的电脑配置是否达到了游戏的要求…

PySimpleGUI 库 和 pymsql 库

PySimpleGUI 库 PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、Qt、WxPython 等&#xff09;&#xff0c;提供了简单易用的 API。PySimpleGUI 包含了大量的控件&#xff08;也称为小部件或组件&#xff09;&…

阿里云centos7.9服务器磁盘挂载,切换服务路径

项目背景 1、项目使用的服务器为阿里云centos7.9&#xff0c;默认的磁盘为vda&#xff0c;文件系统挂载在这个磁盘上&#xff0c;项目上使用的文件夹为/home/hnst/uploadPath 2、vda使用率已达到91% 3、现购置一块新的磁盘为vdb&#xff0c;大小为2T 目的 切换服务所使用的…

【Pytorch】基本语法

Pytorch的基本语法 张量简介 ​ 张量 Tensor 是机器学习的基本构建模块,是以数字方式表示数据的形式. 在张量语言&#xff08;用于描述张量的语言&#xff09;中&#xff0c;张量将具有三个维度&#xff0c;一个维度表示 colour_channels 、 height 和 width 。 张量的基本使…

Python容器模块练习1(list,set)

一.list 1.脚本中有一个存放访问当前服务器的IP地址的列表 ip_adds ["192.168.0.10","192.168.0.23"]&#xff0c;工作过程中有一个新的终端"192.168.0.46"接入服务器&#xff0c;请完成IP地址的追加&#xff1b;延后两分钟后又有两个终端[&qu…

【八百客CRM-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

独立站 API 接口的性能优化策略

一、缓存策略* 数据缓存机制 内存缓存&#xff1a;利用内存缓存系统&#xff08;如 Redis 或 Memcached&#xff09;来存储频繁访问的数据。例如&#xff0c;对于商品信息 API&#xff0c;如果某些热门商品的详情&#xff08;如价格、库存、基本描述等&#xff09;被大量请求…