【MySQL 数据库】MySQL基本查询(第二节)

请添加图片描述

文章目录

  • 📝Update
    • 🌉 将孙悟空同学的数学成绩变更为 80 分
    • 🌉 将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分
    • 🌉 将总成绩倒数前三的3位同学的数学成绩加上30分
    • 🌉将所有同学的语文成绩更新为原来的2倍
  • 🌠 Delete
    • 🌉 删除数据
      • 🌉 删除孙悟空同学的考试成绩
      • 🌉 删除整张表数据
    • 🌉 截断表
  • 🌠 插入查询结果
  • 🌠聚合函数
      • 🌉统计班级共有多少同学
      • 🌉统计班级收集的 qq 号有多少
      • 🌉统计本次考试的数学成绩分数个数
      • 🌉 统计数学成绩总分
      • 🌉统计平均总分
      • 🌉返回英语最高分
      • 🌉返回 > 70 分以上的数学最低分
  • 🌠group by子句的使用
  • 🚩总结


📝Update

【MySQL 数据库】MySQL基本查询(第一节)


语法:

UPDATE table_name SET column = expr [, column = expr ...] 
[WHERE ...] [ORDER BY ...] [LIMIT ...]

对查询到的结果进行列值更新

案例:

🌉 将孙悟空同学的数学成绩变更为 80 分

  • 更新值为具体值
  • 查看原数据
SELECT name, math FROM exam_result WHERE name = '孙悟空';| name | math | 
| 孙悟空 | 78|
1 row in set (0.00 sec) 
  • 数据更新
UPDATE exam_result SET math = 80 WHERE name = '孙悟空'; Query OK, 1 row affected (0.04 sec)
Rows matched:1 Changed:1 warnings:0
  • 查看更新后数据
SELECT name,math FROM exam_result WHERE name="孙悟空';| name | math |
|孙悟空 | 80|
1 row in set(0.00 sec)

🌉 将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分

  • 一次更新多个列
  • 查看原数据
SELECT name,math,chinese FROM exam_result WHERE name="曹孟德';
| name | math | chinese|
| 曹孟德 | 84| 82|
1 row in set (0.00 sec)
  • 数据更新
UPDATE exam_result SET math =60,chinese=70 WHERE name='曹孟德';
Query ok,1 row affected (0.14 sec) Rows matched:1 Changed:1 warnings:0
  • 查看更新后数据
SELECT name,math,chinese FROM exam_result WHERE name="曹孟德';
| name | math | chinese|
| 曹孟德 | 60| 70|
1 row in set (0.00 sec)

🌉 将总成绩倒数前三的3位同学的数学成绩加上30分

  • 更新值为原值基础上变更
  • 别名可以在ORDER BY中使用
  • 查看原数据
SELECT name, math,chinese+math+english总分FROM exam_result
ORDER BY总分LIMIT3;
| name | math| 总分 |
| 宋公明 | 65 | 170 |
| 刘玄德 | 85 | 185 |
| 曹孟德 | 60| 197 |
3 rows in set (0.00sec)
  • 数据更新,不支持math+=30这种语法
UPDATE exam_result SET math = math+30
ORDER BY chinese + math+english LIMIT 3;
  • 查看更新后数据
  • 思考:这里还可以按总分升序排序取前3个么?
SELECT name,math,chinese +math+english总分FROM exam_result WHERE name IN('宋公明','刘玄德','曹孟德');
| name | math| 总分 |
| 曹孟德 | 90 | 227 |
| 刘玄德 | 115 | 215 |
| 宋公明 | 95 | 200 |
3 rows in set (0.00 sec)
  • 按总成绩排序后查询结果
SELECT name,math,chinese+math+english总分FROM exam_result
ORDER BY总分LIMIT3;
| name | math| 总分 |
| 宋公明 | 95 | 200 |
| 刘玄德 | 115 | 215 |
| 唐三藏 | 98 | 221 |
3 rows in set (0.00 sec)

🌉将所有同学的语文成绩更新为原来的2倍

  • 注意:更新全表的语句慎用!
  • 没有WHERE子句,则更新全表
  • 查看原数据
SELECT* FROM exam_result;
| id | name | chinese| math | english |
| 1 | 唐三藏 | 67 | 98 | 56 |
| 2 | 孙悟空 | 87 | 80 | 77 |
| 3 | 猪悟能 | 88 | 98 | 90 |
| 4 | 曹孟德 | 70 | 90 | 67 |
| 5 | 刘玄德 | 55 | 115 | 45 |
| 6 | 孙权 | 70| 73 | 78 |
| 7 | 宋公明 | 75| 95| 30 |
7 rows in set(0.00 sec)
  • 数据更新
UPDATE exam_result SET chinese = chinese*2;
Query OK,7rows affected (0.00 sec)
Rows matched:7 changed:7 warnings:0
  • 查看更新后数据
SELECT* FROM exam_result;
| id | name | chinese | math | english |
| 1 | 唐三藏 | 134 | 98 | 56 |
| 2 | 孙悟空 | 174 | 80 | 77 |
| 3 | 猪悟能 | 176 | 98 | 90 |
| 4 | 曹孟德 | 140 | 90 | 67 |
| 5 | 刘玄德 | 110 | 115 | 45 |
| 6 | 孙权 | 140 | 73 | 78 |
| 7 | 宋公明 | 150 | 95| 30 |
7 rows in set (0.00 sec)

🌠 Delete

🌉 删除数据

语法:

DELETE FROM table_name [WHERE...] [ORDER BY...] [LIMIT...]

案例:

🌉 删除孙悟空同学的考试成绩

  • 查看原数据
SELECT*FROM exam_result WHERE name="孙悟空';
| id | name | chinese | math | english |
| 2 | 孙悟空 | 174 | 80 | 77 |
1 row in set(0.00 sec)
  • 删除数据
DELETE FROM exam_result WHERE name='孙悟空';
Query OK,1 row affected (0.17sec)
  • 查看删除结果
SELECT*FROM exam_result WHERE name="孙悟空';
Empty set (0.00 sec)

🌉 删除整张表数据

  • 注意:删除整表操作要慎用!
  • 准备测试表
CREATE TABLE for_delete ( id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (20);Query OK,0 rows affected (0.16 sec)
);
  • 插入测试数据
INSERT INTO for_delete (name) VALUES ('A'),('B'),("c");Query OK,3 rows affected (1.05 sec) Records:3Duplicates:0 warnings:0
  • 查看测试数据
SELECT* FROM for_delete;| id | name |
| 1 | A |
| 2 | B |
| 3 | C |
3 rows in set (0.00 sec)
  • 删除整表数据
DELETE FROM for_delete;Query OK,3rows affected (0.00 sec)
  • 查看删除结果
SELECT * FROM for_delete;Empty set (0.00 sec)
  • 再插入一条数据,自增id在原值上增长
INSERT INTO for_delete (name) VALUES ("'D");
Query OK,1 row affected (0.00 sec)
  • 查看数据
SELECT* FROM for_delete;| id | name |
| 4 | D |
1 row in set(0.00 sec)
  • 查看表结构,会有AUTO_INCREMENT项
SHOW CREATE TABLE for_delete\G*************************** 1. row ***************************
Table: for_delete
create Table: CREATE TABLE for_delete'(
idint(11)NOT NULL AUTO_NCREMENT, "name' varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

🌉 截断表

语法:

TRUNCATE [TABLE] table_name

注意:
这个操作慎用

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚;
  3. 会重置 AUTO_INCREMENT 项

案例:

  • 准备测试表
CREATE TABLE for_truncate ( 
id INT PRIMARY KEY AUTO_INCREMENT, 
name VARCHAR(20) 
); 
Query OK, 0 rows affected (0.16 sec)
  • 插入测试数据
INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C'); Query OK, 3 rows affected (1.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
  • 查看测试数据
SELECT * FROM for_truncate; 
| id | name | 
| 1 | A | 
| 2 | B | 
| 3 | C | 
3 rows in set (0.00 sec)
  • 截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作
TRUNCATE for_truncate; 
Query OK, 0 rows affected (0.10 sec)
  • 查看删除结果
SELECT * FROM for_truncate; 
Empty set (0.00 sec)
  • 再插入一条数据,自增 id 在重新增长
INSERT INTO for_truncate (name) VALUES ('D'); 
Query OK, 1 row affected (0.00 sec)
  • 查看数据
SELECT * FROM for_truncate; 
| id | name | 
| 1 | D | 
1 row in set (0.00 sec)
  • 查看表结构,会有 AUTO_INCREMENT=2 项
SHOW CREATE TABLE for_truncate\G 
*************************** 1. row ***************************
Table: for_truncate
Create Table: CREATE TABLE `for_truncate` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

🌠 插入查询结果

语法:

INSERT INTO table_name [(column [, column ...])] SELECT ...

案例:
删除表中的重复记录,重复的数据只能有一份

  • 创建原数据表
CREATE TABLE duplicate_table (id int, name varchar(20)); 
Query OK, 0 rows affected (0.01 sec)
  • 插入测试数据
INSERT INTO duplicate_table VALUES 
(100, 'aaa'), 
(100, 'aaa'), 
(200, 'bbb'), 
(200, 'bbb'), 
(200, 'bbb'), 
(300, 'ccc'); 
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

思路:

  • 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table; 
  • 将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
  • 通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table, 
no_duplicate_table TO duplicate_table; 

Query OK, 0 rows affected (0.00 sec)

  • 查看最终结果
SELECT * FROM duplicate_table; | id | name | 
| 100 | aaa | 
| 200 | bbb | 
| 300 | ccc | 
3 rows in set (0.00 sec)

🌠聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

案例:

🌉统计班级共有多少同学

  • 使用 * 做统计,不受 NULL 影响
SELECT COUNT(*) FROM students; | COUNT(*) | 
| 4 |
1 row in set (0.00 sec)
  • 使用表达式做统计
SELECT COUNT(1) FROM students;| COUNT(1) | 
| 4 |
1 row in set (0.00 sec)

🌉统计班级收集的 qq 号有多少

  • NULL 不会计入结果
SELECT COUNT(qq) FROM students; | COUNT(qq) | 
| 1 |
1 row in set (0.00 sec)

🌉统计本次考试的数学成绩分数个数

  • COUNT(math) 统计的是全部成绩
SELECT COUNT(math) FROM exam_result; | COUNT(math) | 
| 6 |
1 row in set (0.00 sec)
  • COUNT(DISTINCT math) 统计的是去重成绩数量
SELECT COUNT(DISTINCT math) FROM exam_result; | COUNT(math) | 
| 6 |
1 row in set (0.00 sec)

🌉 统计数学成绩总分

SELECT SUM(math) FROM exam_result; | SUM(math) | 
| 569 |
1 row in set (0.00 sec)
  • 不及格 < 60 的总分,没有结果,返回 NULL
SELECT SUM(math) FROM exam_result WHERE math < 60;| SUM(math) | 
| NULL | 
1 row in set (0.00 sec)

🌉统计平均总分

SELECT AVG(chinese + math + english) 平均总分 FROM exam_result; 
| 平均总分 |
| 297.5 |

🌉返回英语最高分

SELECT MAX(english) FROM exam_result; | MAX(english) | 
| 90 |
1 row in set (0.00 sec)

🌉返回 > 70 分以上的数学最低分

SELECT MIN(math) FROM exam_result WHERE math > 70; | MIN(math) | 
| 73 |
1 row in set (0.00 sec)

🌠group by子句的使用

  1. 语法结构
    SELECT 分组列1, 分组列2, 聚合函数(统计列)
    FROM 表名
    [WHERE 筛选条件]  -- 分组前筛选行
    GROUP BY 分组列1, 分组列2  -- 按列分组(与SELECT中分组列顺序一致)
    [HAVING 分组筛选条件]  -- 分组后筛选组
    [ORDER BY 排序列];  -- 对分组结果排序
    

在select中使用group by 子句可以对指定列进行分组查询

select column1, column2, .. from table group by column;
  1. 核心规则
    • SELECT 后出现的非聚合函数列,必须全部出现在 GROUP BY 子句中(否则会报错,因为无法确定非分组列的取值)。
    • GROUP BY 可以按多个列分组(先按第一列分组,同一组内再按第二列细分)。

2、经典案例解析(基于 EMP 员工表)
假设 EMP 表结构如下(简化版):

empnoenamejobsaldeptno
1001张三经理500010
1002李四职员200010
1003王五职员180010
1004赵六经理450020
1005钱七职员220020

案例 1:按单个列分组(部门)
需求:显示每个部门的平均工资、最高工资和员工人数。

SELECT deptno AS 部门编号,AVG(sal) AS 平均工资,MAX(sal) AS 最高工资,COUNT(*) AS 员工人数  -- 统计每个部门的人数
FROM EMP
GROUP BY deptno;  -- 按部门编号分组

结果

部门编号平均工资最高工资员工人数
102933.3350003
203350.0045002

案例 2:按多个列分组(部门+岗位)
需求:显示每个部门中,每种岗位的平均工资和最低工资。

SELECT deptno AS 部门编号,job AS 岗位,AVG(sal) AS 平均工资,MIN(sal) AS 最低工资
FROM EMP
GROUP BY deptno, job;  -- 先按部门分组,同部门内再按岗位分组

结果

部门编号岗位平均工资最低工资
10经理5000.005000
10职员1900.001800
20经理4500.004500
20职员2200.002200

案例 3:GROUP BY + HAVING 筛选分组结果
HAVING 用于对分组后的结果进行筛选(类似 WHERE,但 WHERE 是分组前筛选行,HAVING 是分组后筛选组)。

需求:显示平均工资低于 3000 的部门及其平均工资。

SELECT deptno AS 部门编号,AVG(sal) AS 平均工资
FROM EMP
GROUP BY deptno
HAVING 平均工资 < 3000;  -- 筛选分组后的平均工资

结果

部门编号平均工资
102933.33

案例 4:GROUP BY + WHERE + HAVING 组合使用
需求:排除工资低于 1500 的员工后,统计每个部门的平均工资,且只显示平均工资高于 2500 的部门。

SELECT deptno AS 部门编号,AVG(sal) AS 平均工资
FROM EMP
WHERE sal >= 1500  -- 先排除工资<1500的员工(本案例中无此类员工,仅作示例)
GROUP BY deptno
HAVING 平均工资 > 2500;  -- 再筛选平均工资>2500的部门

结果

部门编号平均工资
102933.33
203350.00

三、常见错误与注意事项

  1. SELECT 中的非聚合列必须在 GROUP BY
    错误示例:

    SELECT deptno, job, AVG(sal) FROM EMP GROUP BY deptno;  -- 错误!job未在GROUP BY中
    

    原因:分组后每个部门包含多个岗位,job 列的值不唯一,无法确定显示哪一个。

  2. HAVING 可以使用别名,WHERE 不能
    正确:HAVING 平均工资 < 3000平均工资AVG(sal) 的别名)
    错误:WHERE 平均工资 < 3000WHERE 不支持聚合函数别名)

  3. GROUP BY 的分组顺序不影响结果,但建议与 SELECT 中分组列顺序一致
    例如 GROUP BY deptno, jobGROUP BY job, deptno 分组逻辑不同,结果也不同。


🚩总结

点击刷题----->牛客刷题SQL篇

面试题:SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

请添加图片描述

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

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

相关文章

Axios 响应拦截器

1.定义&#xff1a;响应拦截器&#xff08;Response Interceptor&#xff09;是一个可以在 axios 接收到服务器响应后&#xff0c;响应数据交给 .then() 处理之前执行的函数。你可以用它来统一处理响应数据&#xff0c;进行错误处理&#xff0c;或者对返回的数据做格式化和转换…

k8s的nodeport和ingress

1.流量转发图targerport转发到实际的容器端口containerPort&#xff08;后端端口&#xff09;nodeportingress2.配置场景总结字段作用对象必填示例值何时配置containerPort容器否80需明确记录容器端口时&#xff08;推荐&#xff09;targetPortPod是80定义 Service 转发规则时p…

VLA:自动驾驶的“新大脑”?

&#x1f525; 什么是 VLA&#xff1f;为什么突然火了&#xff1f;在自动驾驶圈子里&#xff0c;最近一个词特别火&#xff1a;VLA。它不是某个新车的型号&#xff0c;也不是某家公司的新品牌&#xff0c;而是一种全新的智能架构&#xff0c;被称为“自动驾驶的大脑2.0”。&…

Linux操作系统之线程(八):信号量sem

前言&#xff1a;大家好啊&#xff0c;我们上一篇文章已经讲解了关于线程同步的一种办法&#xff1a;运用条件变量cond。今天&#xff0c;我们就来学习一下线程同步的另外一种方法&#xff0c;信号量&#xff01;&#xff01;信号量呢有System V 信号量与POSIX 信号量&#xff…

【RocketMQ】一分钟了解RocketMQ

MQ是什么 MQ全称为Message Queue&#xff0c;即消息队列 &#xff0c;是一种提供消息队列服务的中间件&#xff0c;也称为消息中间件&#xff0c;是一套提供了消息生 产、存储、消费全过程的软件系统&#xff0c;遵循FIFO原则。 MQ的好处有哪些 异步解耦 最常见的一个场景是…

01 01 01 第一部分 C++编程知识 C++入门 第一个C++程序

第一部分 C编程知识第一章 C入门 —— 第一个C程序一、第一个C程序代码展示//写一个C程序&#xff0c;实现在屏幕上打印 “hello world” #include <iostream> using namespace std; int main() {cout << "hello world" << endl;return 0; }二、…

进制定义与转换详解

文章目录&#x1f4d8; 进制定义与转换详解一、进制的含义二、常见进制介绍1. 十进制&#xff08;Decimal&#xff0c;Base-10&#xff09;2. 二进制&#xff08;Binary&#xff0c;Base-2&#xff09;3. 八进制&#xff08;Octal&#xff0c;Base-8&#xff09;4. 十六进制&am…

【安卓笔记】用MVC、MVP、MVVM来实现井字棋案例

0. 环境&#xff1a;电脑&#xff1a;Windows10Android Studio: 2024.3.2编程语言: JavaGradle version&#xff1a;8.11.1Compile Sdk Version&#xff1a;35Java 版本&#xff1a;Java111. 首先、简单实现井字棋的功能。功能拆解&#xff1a;1. 棋盘为3x32. 点击棋盘button&a…

【洛谷】单向链表、队列安排、约瑟夫问题(list相关算法题)

文章目录单向链表题目描述题目解析代码队列安排题目描述题目解析代码约瑟夫问题题目描述题目解析代码单向链表 题目描述 题目解析 这道题因为有大量的任意位置插入删除&#xff0c;所以肯定不能用数组&#xff0c;用链表是最合适的&#xff0c;而在算法竞赛通常都用静态链表&a…

当人机交互迈向新纪元:脑机接口与AR/VR/MR的狂飙之路

从手机到 “头盔”&#xff1a;交互终端的变革猜想​​在当今数字化时代&#xff0c;智能手机无疑是我们生活中不可或缺的一部分。它集通讯、娱乐、办公等多种功能于一身&#xff0c;成为了人们与外界交互的主要窗口。然而&#xff0c;随着科技的飞速发展&#xff0c;智能手机作…

InfluxDB HTTP API 接口调用详解(二)

实际应用案例演示 1. 数据写入案例 假设在一个物联网设备数据采集场景中&#xff0c;有多个传感器设备持续采集环境的温度和湿度数据。我们以 Python 语言为例&#xff0c;使用requests库来调用 InfluxDB 的 Write 接口将数据写入 InfluxDB。 首先&#xff0c;确保已经安装了…

世运会线上知识竞赛答题pk小程序怎么做

随着2025年成都世界运动会的来临&#xff0c;越来越多的企事业单位组织员工进行线上知识竞赛&#xff0c;那么答题PK小程序该怎么做&#xff0c;接下来我们来一一分析&#xff1a; 世运会线上知识竞赛答题pk小程序怎么做一、答题功能&#xff1a;支持多种题型&#xff0c;如选择…

Java毕业设计 | 基于微信小程序的家校互动作业管理系统(Spring Boot+Vue.js+uni-app+AI,附源码+文档)

Java毕业设计 | 基于微信小程序的家校互动作业管理系统&#xff08;Spring BootVue.jsuni-app&#xff0c;附源码文档&#xff09;&#x1f3af; 毕业设计私人教练 专注计算机毕设辅导第 6 年&#xff0c;累计 1v1 带飞 800 同学顺利通关。从选题、开题、代码、论文到答辩&…

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器 一、前言 由于 Jellyfin 的 GPL 协议和 Intel 的 media-driver (iHD) Linux 驱动&#xff08;部分开源&#xff09;在协议上不兼容的缘故&#xff0c;Jellyfin 官方的 Docker 镜像&#xff1a;jellyfin/jellyfin 并不包含 …

PyTorch武侠演义 第一卷:初入江湖 第4章:损失玉佩的评分风波

第一卷&#xff1a;初入江湖 第4章&#xff1a;损失玉佩的评分风波比武开幕 晨钟响彻山谷&#xff0c;PyTorch派三年一度的"模型比武大会"正式开始。各分舵弟子列队入场&#xff0c;林小码跟在Tensor大师身后&#xff0c;眼睛瞪得溜圆——只见&#xff1a; "卷积…

HttpServletRequestWrapper存储Request

HTTP请求的输入流只能被读取一次&#xff0c;再想获取就获取不到了&#xff0c;那有什么方法可以缓存呢&#xff0c;我们可以自定义一个HttpServletRequest&#xff0c;或者是想在请求参数中统一添加或删除参数也可以使用此类进行改造&#xff0c;然后通过过滤器继续向下流转。…

算法:数组part02: 209. 长度最小的子数组 + 59.螺旋矩阵II + 代码随想录补充58.区间和 + 44. 开发商购买土地

算法&#xff1a;数组part02: 209. 长度最小的子数组 59.螺旋矩阵II 代码随想录补充58.区间和 44. 开发商购买土地 209. 长度最小的子数组题目&#xff1a;https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 文章讲解&#xff1a;https://programmercarl…

Spring 核心知识点梳理 1

目录 Spring Spring是什么&#xff1f; Spring中重要的模块 Spring中最重要的就是IOC(控制反转)和AOP(面向切面编程) 什么是IOC DI和IOC之间的区别 为什么要使用IOC呢&#xff1f; IOC的实现机制 什么是AOP Aop的核心概念 AOP的环绕方式 AOP发生的时期 AOP和OOP的…

Kafka运维实战 07 - kafka 三节点集群部署(混合模式)(KRaft 版本3.7.0)

目录环境准备主机准备补充说明JDK安装 (三台主机分别执行)下载jdkjdk安装kafka 部署(三台主机分别执行)kafka 下载kafka 版本号结构解析kafka 安装下载和解压安装包(3台主机都执行)配置 server.properties &#xff08;KRaft 模式&#xff09;192.168.37.10192.168.37.11192.16…

linux内核与GNU之间的联系和区别

要理解操作系统&#xff08;如 GNU/Linux&#xff09;的组成&#xff0c;需要明确 内核&#xff08;Kernel&#xff09; 和 GNU 工具链 各自的功能&#xff0c;以及它们如何协作构成完整的操作系统。以下是详细分析&#xff1a;1. 内核&#xff08;Kernel&#xff09;的功能 内…