【 MYSQL | 基础篇 四大SQL语句 】资料位于文章末尾

摘要:本文先介绍数据库 SQL 核心概念,接着阐述 SQL 通用语法DDL、DML、DQL、DCL 四大分类,随后详细讲解各类语句操作,包括 DDL 的数据库与表操作及数据类型,DML 的数据增删改,DQL 的查询语法与功能,DCL 的用户管理和权限控制,助力掌握 MySQL 基础操作。

思维导图

1. MySQL 概述

1.1 数据库相关概念

本部分将讲解三个核心概念:数据库、数据库管理系统、SQL。

名称全称简称
数据库存储数据的仓库,数据是有组织的进行存储DataBase
数据库管理系统操纵和管理数据库的大型软件DataBase Management System 
SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Query Language 

2. SQL语句

全称 Structured Query Language(结构化查询语言),是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。无论使用 Oracle、SQL Server 还是 MySQL 等关系型数据库,均可以通过 SQL 语言进行统一操作,因此掌握 SQL 可灵活适配不同关系型数据库场景。

2.1 SQL 通用语法

在学习具体 SQL 语句前,需先了解 SQL 语言的通用规则

  1. SQL 语句可单行或多行书写,必须以分号结尾

  2. 可使用空格 / 缩进来增强语句可读性(不影响执行结果);

  3. MySQL 中的 SQL 语句不区分大小写,建议关键字使用大写,提高辨识度;

2.2 SQL 分类

根据功能,SQL 语句主要分为四类:DDL、DML、DQL、DCL,具体说明如下:

分类说明
DDL用于定义数据库对象(数据库、表、字段),如创建 / 删除数据库、创建 / 修改表结构等
DML用于对数据库表中的数据进行增、删、改操作
DQL用于查询数据库表中的记录,是业务中使用频次最高的 SQL 类型
DCL用于管理数据库用户、控制数据库访问权限,如创建用户、授予 / 撤销权限等

2.3 DDL(数据定义语言)

DDL 主要用于操作数据库、表、字段等 “结构级” 对象,核心是 “定义结构”,不涉及具体数据。

2.3.1 数据库操作
1. 查询所有数据库
show databases;

执行结果会显示当前 MySQL 服务器中所有已创建的数据库,例如系统默认数据库 information_schemamysqlsys 等。


2. 查询当前数据库
select database();

用于确认当前所处/正在使用的数据库上下文(若未切换数据库,返回 NULL)。


3. 创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ];

易错点:数据库名称在【 if not exists 】后面

  • if not exists:可选参数,避免重复创建同名数据库导致报错(若数据库已存在则不执行);

  • default charset:可选参数,指定数据库默认字符集;

  • collate:可选参数,指定字符排序规则(通常默认跟随字符集,无需手动设置)。


4. 删除数据库
drop database [ if exists ] 数据库名;
  • if exists:可选参数,避免删除不存在的数据库导致报错(若数据库不存在则不执行操作)。


5. 切换数据库
use 数据库名;

操作某数据库下的表前,必须先通过 use 切换到该数据库上下文。

2.3.2 表操作
2.3.2.1 表操作 - 查询与创建
1. 查询当前数据库所有表
show tables;

需先通过 use 切换到目标数据库,否则无法查询表。


2. 查看指定表结构
desc 表名;

返回表的字段名、数据类型、是否允许为 NULL、主键 / 外键、默认值等结构信息。


3. 查询指定表的建表语句
show create table 表名;

返回创建该表的完整 SQL 语句,包含默认存储引擎(如 InnoDB)、字符集等隐式配置。


4. 创建表结构
CREATE TABLE 表名(
​字段1 字段1类型 [ COMMENT 字段1注释 ],
​字段2 字段2类型 [ COMMENT 字段2注释 ],
​...
​字段n 字段n类型 [ COMMENT 字段n注释 ]
​
) [ COMMENT 表注释 ];
  • 字段定义格式:字段名 类型 [约束] [注释]

  • 最后一个字段后不能加逗号,否则会语法报错;

  • COMMENT:可选参数,用于添加字段 / 表的说明,提高可读性。

2.3.2.2 表操作 - 数据类型

MySQL 中的数据类型主要分为三类:数值类型字符串类型日期时间类型,需根据业务场景选择合适的类型(如年龄用 TINYINT,手机号用 CHAR(11))。

1. 数值类型

适用于存储整数、小数等数值数据,核心是 “节省存储空间” 和 “保证精度”。

类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述
TINYINT1byte(-128, 127)(0, 255)小整数值(如年龄、状态码)
SMALLINT2bytes(-32768, 32767)(0, 65535)中整数值(如数量较少的 ID)
MEDIUMINT3bytes(-8388608, 8388607)(0, 16777215)大整数值
INT/INTEGER4bytes(-2147483648, 2147483647)(0, 4294967295)常用大整数值(如用户 ID、订单 ID)
BIGINT8bytes(-2^63, 2^63-1)(0, 2^64-1)极大整数值(如海量数据的 ID)
FLOAT4bytes(-3.4E+38, 3.4E+38)0 和 (1.2E-38, 3.4E+38)单精度浮点数(精度较低,不适合金额)
DOUBLE8bytes(-1.8E+308, 1.8E+308)0 和 (2.2E-308, 1.8E+308)双精度浮点数(精度较高,仍不适合金额)
DECIMAL可变依赖 M(精度)和 D(标度)依赖 M(精度)和 D(标度)定点小数(精确存储,适合金额、分数等)

使用建议

  • 年龄:TINYINT UNSIGNED(无负数,范围 0-255 足够);

  • 分数(如满分 100,1 位小数):DOUBLE(4,1)(总长度 4,小数位 1,范围 0.0-100.0);

  • 金额(如保留 2 位小数):DECIMAL(10,2)(避免浮点数精度丢失)。

2. 字符串类型

适用于存储文本、符号等字符数据,核心是 “区分定长与变长”。

类型大小描述
CHAR0-255 bytes定长字符串(指定长度后,无论实际值多长,均占用固定字节)
VARCHAR0-65535 bytes变长字符串(仅占用实际值长度 + 1-2 字节的长度标识,节省空间)
TINYTEXT0-255 bytes短文本(适合存储少量文字,如备注)
TEXT0-65535 bytes长文本(适合存储文章、评论等)
MEDIUMTEXT0-16777215 bytes中等长度文本
LONGTEXT0-4294967295 bytes极大文本(适合存储超大文本,如日志)
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB同对应 TEXT 类型二进制数据(如图片、文件,不推荐直接存储,建议存文件路径)

CHAR 与 VARCHAR 区别

  • CHAR(10):存储 “abc” 时,仍占用 10 字节(空格填充),性能高;

  • VARCHAR(10):存储 “abc” 时,仅占用 3 + 1 = 4 字节(1 字节标识长度),节省空间。

使用建议

  • 用户名(长度不定,最长 50):VARCHAR(50)

  • 性别(固定值 “男 / 女”):CHAR(1)

  • 手机号(固定 11 位):CHAR(11)

3. 日期时间类型

适用于存储日期、时间或混合时间数据,核心是 “匹配业务场景精度”。

类型大小范围格式描述
DATE3bytes1000-01-01 至 9999-12-31YYYY-MM-DD仅日期(如生日)
TIME3bytes-838:59:59 至 838:59:59HH:MM:SS仅时间(如打卡时间)
YEAR1byte1901 至 2155YYYY仅年份(如毕业年份)
DATETIME8bytes1000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS日期 + 时间(如订单创建时间,不依赖时区)
TIMESTAMP4bytes1970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS日期 + 时间(依赖时区,自动更新,适合记录 “最后修改时间”)

使用建议

  • 生日:DATE

  • 订单创建时间:DATETIME

  • 数据最后修改时间:TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(自动更新)。

2.3.2.3 表操作 - 修改(修改表结构)
1. 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

2. 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);

3. 修改字段名和数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

可同时修改字段名和类型,需注意新旧字段名的顺序。


4. 删除字段
ALTER TABLE 表名 DROP 字段名;

5. 修改表名
ALTER TABLE 表名 RENAME TO 新表名;

核心:ALTER  TABLE  表名   [ 操作 ]  字段名   类型 

2.3.2.4 表操作 - 删除
1. 删除表
DROP TABLE [ IF EXISTS ] 表名;

if exists:避免删除不存在的表导致报错。

2. 删除表并重新创建(清空数据 + 保留结构)
TRUNCATE TABLE 表名;
  • 效果:删除表中所有数据,但保留表结构(相当于 “清空表”);

  • 注意:数据无法恢复,且自增字段会重置为初始值(如 1)。

2.5 DML(数据操作语言)

DML 用于对表中的数据进行 “增、删、改” 操作,核心是 “操作数据”,不改变表结构。

2.5.1 添加数据(INSERT)
1. 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
  • 字段名与值必须一一对应(顺序、数量、类型需匹配);

  • 字符串和日期类型的值必须用单引号包裹;

  • 字段值需符合表结构约束。

2. 给全部字段添加数据(省略字段名)
INSERT INTO 表名 VALUES (值1, 值2, ...);
  • 需按表中字段的默认顺序传入所有字段的值,不推荐(表结构变更后易报错)。

3. 批量添加数据
-- 方式1:指定字段批量插入
​
INSERT INTO 表名 (字段名1, 字段名2, ...)
​
VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
​
-- 方式2:全部字段批量插入
​
INSERT INTO 表名
​
VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
注意事项
  1. 字段顺序与值顺序必须一致;

  2. 字符串、日期类型必须用单引号包裹;

  3. 插入的值需符合字段约束(如长度、范围、非空等),否则报错。

2.5.2 修改数据(UPDATE)
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];

WHERE:可选参数,用于指定修改的范围(若省 WHERE,则修改表中所有数据,谨慎)。

注意事项
  1. WHERE 条件会修改全表数据,生产环境中需严格校验条件;

  2. 可同时修改多个字段,用逗号分隔字段赋值表达式。

2.5.3 删除数据(DELETE)
DELETE FROM 表名 [ WHERE 条件 ];
  • WHERE:可选参数,指定删除的范围(若省略 WHERE,则删除表中所有数据!)。

注意事项
  1. WHERE 条件会删除全表数据,且数据无法通过 ROLLBACK 恢复(除非开启事务);

  2. DELETE 只能删除行数据,不能删除单个字段的值(需用 UPDATE 将字段设为 NULL);

  3. DataGrip 等工具会对删除全表操作进行二次确认,避免误操作。

2.6 DQL(数据查询语言)

DQL 用于查询表中的记录,是业务中最常用的 SQL 类型,支持条件筛选、排序、分组、分页等复杂操作。

2.6.1 数据准备

先创建 emp 员工表并插入测试数据,后续案例基于该表展开。

2.6.2 DQL 基本语法

完整 DQL 语法结构(按编写顺序):

SELECT
​
字段列表  -- 要查询的字段(如 name, age 或 * 表示所有字段)
​
FROM
​
表名列表  -- 要查询的表(单表查询仅需写表名)
​
WHERE
​
条件列表  -- 行级筛选条件(如 age > 20)
​
GROUP BY
​
分组字段列表  -- 按指定字段分组(如按 gender 分组)
​
HAVING
​
分组后条件列表  -- 分组后的筛选条件(如 count(*) > 5)
​
ORDER BY
​
排序字段列表  -- 按指定字段排序(如 age ASC 升序)
​
LIMIT
​
分页参数  -- 分页查询(如 LIMIT 0, 10 表示第 1 页,10 条/页)

执行顺序(与编写顺序不同,需重点理解):

FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT

2.6.3 基础查询(无筛选条件)
1. 查询多个指定字段
SELECT 字段1, 字段2, ... FROM 表名;

2. 查询所有字段(不推荐)
SELECT * FROM 表名;

缺点:不直观、影响效率(若表字段多,会冗余返回不必要的字段),生产环境建议明确指定字段。


3. 字段设置别名
-- 方式1:使用 AS(推荐,可读性高)
​
SELECT 字段1 AS 别名1, 字段2 AS 别名2 FROM 表名;
​
-- 方式2:省略 AS(简洁)
​
SELECT 字段1 别名1, 字段2 别名2 FROM 表名;

别名含空格或特殊字符时,需用单引号包裹。


4. 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;

仅当所有指定字段的值完全相同时,才会被视为重复记录并去重。

2.6.4 条件查询(WHERE)

通过 WHERE 子句筛选符合条件的行数据,支持比较运算符和逻辑运算符。

1. 常用比较运算符
比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<>!=不等于
BETWEEN ... AND ...在指定范围(含边界)
IN(...)在指定集合中
LIKE 占位符模糊匹配
IS NULL为空
IS NOT NULL不为空
  • 模糊匹配占位符:

   `_`:匹配单个任意字符;
​`%`:匹配 0 个或多个任意字符。
2. 常用逻辑运算符
逻辑运算符功能
AND&&并且(多个条件同时成立)
OR 或 ``
NOT!非(否定条件)

2.6.5 聚合函数

聚合函数用于对一列数据进行 “纵向计算”(将列数据视为一个整体),返回单个结果值。

1. 常用聚合函数
函数功能
count(字段)统计非 NULL 值的记录数
max(字段)求该列的最大值
min(字段)求该列的最小值
avg(字段)求该列的平均值
sum(字段)求该列的总和

注意:NULL 值不参与任何聚合函数计算。

2. 语法
SELECT 聚合函数(字段列表) FROM 表名 [ WHERE 条件 ];

2.6.6 分组查询(GROUP BY)

通过 GROUP BY 按指定字段分组,将相同值的行归为一组,然后对每组进行聚合计算(如统计每组人数、平均年龄)。

1. 语法
SELECT 分组字段, 聚合函数(字段) FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段 [ HAVING 分组后条件 ];
  • WHERE:分组的筛选条件(筛选行数据,不满足条件的行不参与分组);

  • HAVING:分组的筛选条件(筛选分组结果,不满足条件的分组不显示)。

注意:前后的第一个查询字段必须相同,都为分组字段,第二个是聚合函数才有意义

2. WHERE 与 HAVING 的区别
对比维度WHEREHAVING
执行时机分组前分组后
作用对象行数据分组结果
支持的条件不能使用聚合函数可以使用聚合函数
3. 注意事项
  1. 分组后查询的字段只能是 “分组字段” 或 “聚合函数”,查询其他字段无意义(结果不可控);

  2. 多字段分组时,按字段顺序依次分组(先按第一个字段分组,同组内再按第二个字段分组)。

2.6.7 排序查询(ORDER BY)

通过 ORDER BY 按指定字段对查询结果排序,支持升序和降序。

1. 语法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] [ GROUP BY 分组字段 ] [ HAVING 分组后条件 ] ORDER BY 字段1 排序方式1, 字段2 排序方式2 ...;
  • 排序方式:

   `ASC`:升序(默认,可省略);
​`DESC`:降序;

多字段排序:先按字段 1 排序,字段 1 值相同的行再按字段 2 排序。

2.6.8 分页查询(LIMIT)

通过 LIMIT 实现分页查询(避免一次性返回大量数据,优化性能),仅 MySQL 支持(其他数据库如 Oracle 用 ROWNUM)。

1. 语法
SELECT 字段列表 FROM 表名 [ 其他子句 ] LIMIT 起始索引, 查询记录数;
  • 起始索引:从 0 开始(表示第 1 条数据的索引为 0);

  • 计算公式:起始索引 = (页码 - 1) * 每页记录数

  • 若查询第 1 页数据,起始索引可省略。

2.6.9 DQL 执行顺序验证

通过别名测试可确认 DQL 执行顺序:

FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT

2.7 DCL(数据控制语言)

DCL 用于管理数据库用户和控制访问权限,主要由 DBA(数据库管理员)操作,开发人员使用较少。

2.7.1 管理用户
1. 查询用户

MySQL 中所有用户信息存储在系统数据库 mysqluser 表中:

select * from mysql.user;
  • 核心字段:

   `Host`:用户可访问的主机(`localhost` 表示仅本地访问,`%` 表示任意主机访问);
​`User`:用户名;
​`authentication_string`:用户密码(加密存储)。
  • 注意:Host + User 唯一标识一个用户(同一用户名,不同主机视为不同用户)。


2. 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  • 主机名:

  `localhost`:仅允许本地(当前服务器)访问;
​`%`:允许任意主机访问(远程访问需开放 MySQL 端口 3306);

密码:长度至少 4 位(MySQL 8.0+ 默认密码策略较严格,需包含字母、数字、符号)。


3. 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql\_native\_password BY '新密码';

mysql_native_password:指定密码加密方式(兼容旧版本客户端,MySQL 8.0+ 推荐)。


4. 删除用户
DROP USER '用户名'@'主机名';
注意事项
  1. 必须指定 主机名(即使是 %),否则无法准确匹配用户;

  2. 开发环境中避免创建 % 主机的用户(安全风险),建议仅允许指定 IP 访问。

2.7.2 权限控制

MySQL 定义了多种权限,常用权限如下:

权限说明
ALLALL PRIVILEGES所有权限
SELECT查询数据权限(仅 DQL)
INSERT插入数据权限(仅 DML)
UPDATE修改数据权限(仅 DML)
DELETE删除数据权限(仅 DML)
ALTER修改表结构权限(仅 DDL)
DROP删除数据库 / 表 / 视图权限(仅 DDL)
CREATE创建数据库 / 表权限(仅 DDL)
1. 查询用户权限
SHOW GRANTS FOR '用户名'@'主机名';

2. 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  • 权限列表:多个权限用逗号分隔(如 SELECT, INSERT),ALL 表示所有权限;

  • 数据库名。表名:

  `*.*`:所有数据库的所有表(全局权限);
​`itcast.*`:`itcast` 数据库的所有表;
​`itcast.emp`:`itcast` 数据库的 `emp` 表。

3. 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
注意事项
  1. 授予 / 撤销权限后,无需重启 MySQL,权限立即生效;

  2. 开发环境中遵循 “最小权限原则”(如仅给查询需求的用户授予 SELECT 权限),避免权限过大导致安全风险。


黑马十天精通MYSQL百度网盘资料链接

 提取码: wind 

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

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

相关文章

Webrtc支持FFMPEG硬解码之Intel

Intel QSV下载编译git clone https://github.com/lu-zero/mfx_dispatch.git1.使用CMake生产VS工程编译生成libmfx.lib文件 头文件为mfx文件夹libmfx---include---mfx---lib---libmfx.libWebrtc中ffmpeg的修改因为Webrtc中的ffmpeg是使用gn进行编译的&#xff0c;所以这里先找到…

【二叉树(DFS) - LeetCode】437. 路径总和 III

437. 路径总和 III 题解&#xff1a;DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullp…

【Python】shutil.make_archive() 方法详解

文章目录功能概述函数签名核心参数详解1. base_name2. format3. root_dir4. base_dir使用示例将 /home/user/project/data 目录打包为 data.tar.gz&#xff0c;并保存到 /home/user/backups/打包当前工作目录下的 docs 文件夹为 zip 文件替代方案总结shutil.make_archive() 是 …

CAN总线(Controller Area Network Bus)控制器局域网总线(二)

6、错误帧 总线上所有设备都会监督总线的数据&#xff0c;一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” &#xff0c;这些设备便会发出错误帧来破坏数据&#xff0c;同时终止当前的发送设备。7、过载帧 当接收方收到大量数据而无法处理时&#…

LeetCode 317 离建筑物最近的距离

LeetCode 317 题的详细题目信息如下&#xff1a;题目名称Shortest Distance from All Buildings&#xff08;中文译名&#xff1a;离建筑物最近的距离&#xff09;题目描述给你一个由 0、1 和 2 组成的二维网格&#xff0c;其中&#xff1a;0 代表空地1 代表建筑物2 代表障碍物…

AI之CodeTool之Kode:Kode(claude_code风格)的简介、安装和使用方法、案例应用之详细攻略

AI之CodeTool之Kode&#xff1a;Kode(claude_code风格)的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之PE之SystemPrompt&#xff1a;analysis_claude_code的简介、使用方法、案例应用之详细攻略 AI之CodeTool之Kode&#xff1a;Kode(claude_code风格)的简…

网络请求优化:用 Retrofit 拦截器玩转日志、重试与缓存,OkHttp 和 Volley 谁更香?

目录 1. 拦截器:Retrofit 的“超级管理员” 拦截器的本质 为什么用拦截器? 2. 日志拦截器:让请求和响应“现原形” 引入日志拦截器 实现日志拦截器 日志输出示例 生产环境注意事项 3. 重试拦截器:网络不稳定也能稳如狗 设计重试逻辑 集成到 Retrofit 优化重试策…

LeetCode - 283. 移动零

题目 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 思路 我们使用左右两个指针&#xff1a;左指针left指向已处理好的非零元素的末尾位置&#xff0c;右指针right用于遍历数组。 算法步骤&#xff1a; 初始化left为-1&#xff08;表示还没有处理任何非零元素&…

Redis不同场景下的注意事项

Redis常见的 使用场景&#xff1a; 缓存系统(核心场景) 存储热点数据&#xff0c;减少数据库访问压力。提升接口响应速度。技术点&#xff1a; 用String/Hash 存储结构化数据结合过期时间&#xff08;TTL&#xff09;和缓存淘汰策略(如LRU)管理内存。解决缓存问题&#xff1a;穿…

【完整源码+数据集+部署教程】高速公路施工区域物体检测系统源码和数据集:改进yolo11-RepNCSPELAN

背景意义 随着城市化进程的加快&#xff0c;高速公路建设与维护工作日益频繁&#xff0c;施工区域的安全管理成为亟待解决的重要问题。在高速公路施工区域&#xff0c;工人和设备的安全是首要考虑因素&#xff0c;而有效的物体检测系统能够显著提高施工现场的安全性与工作效率。…

如何在FastAPI中玩转全链路追踪,让分布式系统故障无处遁形?

url: /posts/30e1d2fbf1ad8123eaf0e1e0dbe7c675/ title: 全链路追踪如何让FastAPI微服务架构的每个请求都无所遁形? date: 2025-08-28T23:40:47+08:00 lastmod: 2025-08-28T23:40:47+08:00 author: cmdragon summary: 全链路追踪是现代微服务架构中监控系统行为的核心技术,通…

Win11 压缩实测:Win11 的压缩软件的最佳配置和使用方式

文章目录测试环境机器配置被压缩文件WinRAR7zipLinux子系统准备极限压缩减小字典的极限压缩7zipWin11准备极限压缩7zip系统内置右键压缩菜单极限压缩总结&#xff1a;Win11 的压缩软件的最佳配置和使用方式测试环境 机器配置 Win11系统 16GB内存 8核CPU 被压缩文件 文件夹内…

CMake构建学习笔记22-libxml2库的构建

在上一篇文章《CMake构建学习笔记21-通用的CMake构建脚本》中&#xff0c;笔者封装了一个通用的cmake构建脚本cmake-build.ps1&#xff0c;那么这里笔者就尝试通过这个脚本来构建libxml2库。 libxml2是GNOME项目下的XML库&#xff0c;虽然比不上TinyXML-2轻量&#xff0c;但是…

虚拟私有网络笔记

VPN应用场景 ——VPN概述  利用公共网络来构建的私人专用网络称为虚拟私有网络&#xff08;VPN&#xff0c; Virtual Private Network&#xff09;&#xff0c;用于构建VPN的公共网络包括Internet 、帧中继、ATM等。在公共网络上组建的VPN象企业现有的私有网络 一样提供安全性…

Python 轻量级 HTML 解析器 - lxml入门教程

文章目录初始化解析器路径查找查找所有标签查找指定 id 的标签查找指定 class 的标签查找包含指定 class 的标签复杂路径查找示例1示例2常见操作获取所有标签的链接获取 div 标签的文本内容, 其他标签类似其他元素操作初始化解析器 from lxml import html from lxml.html impor…

(CVPR-2025)VideoMage:文本生成视频扩散模型的多主体与动作定制化

VideoMage&#xff1a;文本生成视频扩散模型的多主体与动作定制化 paper title&#xff1a;VideoMage: Multi-Subject and Motion Customization of Text-to-Video Diffusion Models paper是National Taiwan University发表在CVPR 2025的工作 Code:链接 图1. 多主体与动作定制化…

OpenCV轮廓近似与Python命令行参数解析

在计算机视觉任务中&#xff0c;轮廓分析是目标检测、形状识别的核心步骤。而approxPolyDP函数作为轮廓简化的关键工具&#xff0c;能有效减少轮廓顶点数量&#xff0c;降低计算复杂度&#xff1b;同时&#xff0c;argparse库则能让Python脚本更灵活、易用。本文将结合具体案例…

基于Springboot在线音乐推荐平台

目录 一、项目介绍 二、功能介绍 三、核心代码 四、效果图 源码获取 前言 在经济繁荣的浪潮过去后&#xff0c;社会的焦点逐渐从物质追求转向了文化和生活品质的提升[1]。文化生活的繁荣成为人们关注的焦点之一&#xff0c;而音乐&#xff0c;作为文化的一部分&#xff0…

LeetCode算法日记 - Day 26: 归并排序、交易逆序对的总数

目录 1. 归并排序 1.1 题目解析 1.2 解法 1.3 代码实现 2. 交易逆序对的总数 2.1 题目解析 2.2 解法 2.3 代码实现 1. 归并排序 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任…

C++(Qt)软件调试---vcpkg安装crashpad(34)

C(Qt)软件调试—vcpkg安装crashpad&#xff08;34&#xff09; 文章目录C(Qt)软件调试---vcpkg安装crashpad&#xff08;34&#xff09;[toc]1 概述&#x1f41c;2 环境配置3 qt使用crashpad库捕获异常4 cmake中添加crashpad5 相关地址&#x1f410;更多精彩内容&#x1f449;内…