MySQL视图:虚拟表的强大功能与应用实践
在数据库管理系统中,视图(View)是一种极其重要却常被忽视的功能。作为MySQL数据库的核心特性之一,视图为开发者和数据库管理员提供了数据抽象、安全控制和查询简化的强大工具。本文将全面探讨MySQL视图的概念、工作原理、创建与管理方法,以及在实际项目中的最佳实践,帮助您充分利用这一功能来优化数据库操作。
一、MySQL视图概述
1.1 什么是数据库视图
视图是MySQL中的一种虚拟表,它基于一个或多个实际表的查询结果而创建。与物理表不同,视图本身并不存储实际数据,而是存储了用于检索数据的SQL查询语句。每次访问视图时,MySQL都会执行这些查询,动态生成结果集。
形象地说,视图就像是一个预先定义好的"查询窗口",通过这个窗口,用户可以看到特定角度和范围的数据,而不必关心底层表的具体结构和复杂关系。
1.2 视图与物理表的区别
特性 | 物理表 | 视图 |
---|---|---|
数据存储 | 实际存储数据 | 不存储数据,只存储查询 |
占用空间 | 占用物理存储空间 | 占用极少空间(仅存储定义) |
更新操作 | 直接支持所有DML操作 | 有限条件下支持更新 |
索引 | 可以创建索引 | 不能直接创建索引 |
性能 | 查询性能高 | 性能依赖于基础查询 |
1.3 视图的工作原理
当创建一个视图时,MySQL会将视图的定义(即SELECT语句)存储在数据字典中。当用户查询视图时:
-
MySQL解析器首先识别到查询的是视图而非表
-
从数据字典中检索视图的定义
-
将视图定义与用户查询合并,形成完整的查询
-
执行合并后的查询并返回结果
这个过程称为"视图解析"(View Resolution),是视图实现的核心机制。
二、MySQL视图的核心优势
2.1 简化复杂查询
视图最显著的优势是能够将复杂的多表查询封装为一个简单的虚拟表。考虑以下场景:
-- 复杂的多表连接查询
SELECT c.customer_id,c.customer_name,o.order_id,o.order_date,p.product_name,od.quantity,(od.quantity * od.unit_price) AS total_price
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
JOIN order_details od ON o.order_id = od.order_id
JOIN products p ON od.product_id = p.product_id
WHERE o.order_date > '2023-01-01';
通过创建视图,可以将这个复杂查询简化为:
CREATE VIEW customer_order_details AS
SELECT c.customer_id,c.customer_name,o.order_id,o.order_date,p.product_name,od.quantity,(od.quantity * od.unit_price) AS total_price
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
JOIN order_details od ON o.order_id = od.order_id
JOIN products p ON od.product_id = p.product_id
WHERE o.order_date > '2023-01-01';-- 使用视图简化查询
SELECT * FROM customer_order_details WHERE customer_id = 1001;
2.2 数据安全与权限控制
视图提供了精细的数据访问控制能力:
-
列级安全:可以只暴露表中的特定列
CREATE VIEW employee_public_info AS SELECT employee_id, first_name, last_name, department FROM employees;
-
行级安全:通过WHERE子句限制可见数据
CREATE VIEW my_orders AS SELECT * FROM orders WHERE user_id = CURRENT_USER();
-
敏感数据保护:隐藏敏感信息或实现数据脱敏
CREATE VIEW masked_customers AS SELECT customer_id,CONCAT(LEFT(customer_name, 1), '***') AS masked_name,CONCAT('****-****-****-', RIGHT(credit_card, 4)) AS masked_card FROM customers;
2.3 逻辑数据独立性
视图可以在不改变应用程序代码的情况下修改底层数据结构:
-
当表结构变化时,只需调整视图定义保持接口不变
-
方便进行数据库重构和优化
-
实现向后兼容,支持新旧系统过渡
2.4 业务逻辑封装与重用
将常用的业务逻辑封装在视图中:
-
统一计算逻辑,确保一致性
CREATE VIEW sales_performance AS SELECT salesperson_id,COUNT(*) AS total_orders,SUM(amount) AS total_sales,SUM(amount) / COUNT(*) AS avg_order_value FROM orders GROUP BY salesperson_id;
-
减少代码重复,提高开发效率
-
集中管理业务规则,便于维护
三、MySQL视图的创建与管理
3.1 创建视图的基本语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION];
关键参数说明:
-
OR REPLACE
:如果视图已存在则替换 -
ALGORITHM
:指定视图处理算法 -
WITH CHECK OPTION
:确保通过视图修改的数据仍符合视图定义
3.2 视图算法详解
MySQL支持三种视图处理算法:
-
MERGE:将视图定义合并到外部查询中,
-
TEMPTABLE:先将视图结果存入临时表,再处理外部查询
-
UNDEFINED(默认):由MySQL自动选择最佳算法
3.3 视图修改与删除
更新视图定义:
ALTER VIEW view_name AS new_select_statement;
-- 或
CREATE OR REPLACE VIEW view_name AS new_select_statement;
删除视图:
DROP VIEW [IF EXISTS] view_name;
3.4 查看视图信息
查看视图定义:
查看数据库中的所有视图:
SHOW FULL TABLES WHERE table_type = 'VIEW';
通过information_schema查询视图元数据:
SELECT * FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = 'your_database';
四、可更新视图与性能考量
4.1 可更新视图的条件
视图在满足以下条件时可以执行INSERT、UPDATE、DELETE操作:
-
基于单个基表(而非多表连接)
-
不包含聚合函数(如SUM, COUNT等)
-
不包含GROUP BY、HAVING、DISTINCT子句
-
包含基表的所有NOT NULL列(对于INSERT操作)
-
不包含子查询在SELECT列表中
-
没有使用UNION、UNION ALL等集合操作
示例:
-- 可更新视图
CREATE VIEW active_products AS
SELECT product_id, product_name, price, stock
FROM products
WHERE status = 'active';-- 可以执行更新
UPDATE active_products SET price = price * 0.9 WHERE product_id = 101;
4.2 WITH CHECK OPTION详解
WITH CHECK OPTION
确保通过视图修改的数据仍符合视图的WHERE条件:
CREATE VIEW high_value_orders AS
SELECT * FROM orders WHERE amount > 1000
WITH CHECK OPTION;-- 此操作会失败,因为新金额不满足>1000条件
UPDATE high_value_orders SET amount = 900 WHERE order_id = 1001;
4.3 视图性能优化策略
虽然视图提供了许多便利,但不当使用可能导致性能问题:
-
避免过度嵌套视图:多层嵌套视图会显著降低性能
-
谨慎使用TEMPTABLE算法:大数据量时临时表可能成为瓶颈
-
为基表添加适当索引:视图查询最终会使用基表的索引
-
考虑使用物化视图替代方案:
-
MySQL原生不支持物化视图,但可通过定期刷新的表模拟
-
或使用存储过程实现类似功能
-
-
监控视图性能:
EXPLAIN SELECT * FROM your_view WHERE ...;
五、MySQL视图的高级应用
5.1 视图与存储过程/函数的结合
将视图与存储程序结合实现更强大的功能:
CREATE PROCEDURE get_customer_summary(IN cust_id INT)
BEGIN-- 使用视图简化存储过程逻辑SELECT * FROM customer_order_summary WHERE customer_id = cust_id;
END;
5.2 实现分页查询
创建带行号的分页视图:
CREATE VIEW paginated_products AS
SELECT (@row_number:=@row_number+1) AS row_num,product_id,product_name,price
FROM products, (SELECT @row_number:=0) AS t
ORDER BY product_name;-- 获取第11-20条记录
SELECT * FROM paginated_products
WHERE row_num BETWEEN 11 AND 20;
5.3 动态视图模式
通过预处理语句创建动态视图:
SET @sql = CONCAT('CREATE VIEW dynamic_view AS SELECT * FROM ', @table_name, ' WHERE ', @condition);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
5.4 视图与触发器的结合
虽然不能直接在视图上创建触发器,但可以通过基表触发器实现视图相关逻辑:
CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN-- 更新物化视图表INSERT INTO order_summary_mv (customer_id, order_count, total_amount)VALUES (NEW.customer_id, 1, NEW.amount)ON DUPLICATE KEY UPDATE order_count = order_count + 1,total_amount = total_amount + NEW.amount;
END;
六、MySQL视图的最佳实践
6.1 命名规范建议
-
使用一致的前缀或后缀,如
v_
、vw_
或_view
-
采用描述性名称,反映视图用途
-
避免使用保留关键字
-
考虑命名模式:
[范围]_[主体]_[用途]_view
示例:
-
sales_customer_order_summary_view
-
hr_employee_public_v
6.2 文档化视图定义
为重要视图添加注释:
CREATE VIEW customer_orders /* 客户订单汇总视图 - 财务部门使用 */ AS
...
维护视图文档,包括:
-
创建目的
-
基表来源
-
刷新策略(如果是物化视图)
-
使用注意事项
6.3 视图使用场景判断
适合使用视图的场景:
-
频繁执行的复杂查询
-
需要行级或列级安全控制的场景
-
需要保持向后兼容的接口
-
简化应用程序代码
不适合使用视图的场景:
-
极简查询(直接查询表可能更高效)
-
需要最高性能的关键路径查询
-
频繁更新的数据(考虑使用表代替)
6.4 版本控制与变更管理
将视图定义纳入版本控制:
-
导出视图定义脚本
SHOW CREATE VIEW view_name;
-
与数据库迁移工具(如Flyway、Liquibase)集成
-
实现变更审核流程,特别是生产环境视图修改
七、MySQL视图的局限性与替代方案
7.1 主要局限性
-
性能开销:复杂视图可能导致查询性能下降
-
更新限制:许多视图不可更新,特别是涉及多表连接的
-
索引限制:无法直接在视图上创建索引
-
嵌套限制:过度嵌套视图会带来维护和性能问题
7.2 替代方案
-
物化视图:
-
通过定期刷新的表模拟
-
使用事件调度器或触发器维护
CREATE TABLE order_summary_mv (customer_id INT PRIMARY KEY,order_count INT,total_amount DECIMAL(10,2) );-- 定期刷新 TRUNCATE TABLE order_summary_mv; INSERT INTO order_summary_mv SELECT customer_id, COUNT(*), SUM(amount) FROM orders GROUP BY customer_id;
-
-
存储过程/函数:
-
封装复杂逻辑
-
提供更好的控制流
-
-
派生表/公共表表达式(CTE):
-
MySQL 8.0+支持CTE
WITH customer_stats AS (SELECT customer_id, COUNT(*) AS order_countFROM orders GROUP BY customer_id ) SELECT c.customer_name, cs.order_count FROM customers c JOIN customer_stats cs ON c.customer_id = cs.customer_id;
-
结语
MySQL视图作为强大的数据库抽象工具,在简化查询、增强安全、封装逻辑等方面发挥着不可替代的作用。合理使用视图可以显著提高开发效率、降低维护成本并增强数据安全性。然而,也需要注意视图的性能影响和更新限制,根据具体场景选择最合适的实现方案。
随着MySQL 8.0引入的诸多新特性,如CTE(公共表表达式)和窗口函数,视图的使用模式也在不断演进。掌握视图的核心原理和最佳实践,将帮助您构建更加灵活、高效的数据库应用架构。
相关文章:
MySQL视图:虚拟表的强大功能与应用实践
在数据库管理系统中,视图(View)是一种极其重要却常被忽视的功能。作为MySQL数据库的核心特性之一,视图为开发者和数据库管理员提供了数据抽象、安全控制和查询简化的强大工具。本文将全面探讨MySQL视图的概念、工作原理、创建与管理方法,以及…...
matlab插值方法(简短)
在MATLAB中,可以使用interp1函数快速实现插值。以下代码展示了如何使用spline插值方法对给定数据进行插值: x1 [23,56]; y1 [23,56]; X 23:1:56*4; Y interp1(x1,y1,X,spline);% linear、 spline其中,x1和y1是已知数据点,X是…...
【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架
最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用,Deer-Flow(Deep Exploration and Efficient Research Flow)作为字节跳动近期开源的重量级项目,正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…...
基于开源AI大模型与S2B2C生态的个人品牌优势挖掘与标签重构研究
摘要:在数字文明时代,个人品牌塑造已从传统经验驱动转向数据智能驱动。本文以开源AI大模型、AI智能名片与S2B2C商城小程序源码为技术载体,提出"社会评价-数据验证-标签重构"的三维分析框架。通过实证研究发现,结合第三方…...
2025年PMP 学习十二 第9章 项目资源管理
2025年PMP 学习十二 第9章 项目资源管理 序号过程过程组1规划资源管理规划2估算活动资源规划3获取资源执行4建设团队执行5管理团队执行6控制资源监控 项目资源管理,包括实物资源和团队资源。 文章目录 2025年PMP 学习十二 第9章 项目资源管理项目团队和 项目管理团…...
AI生成功能测试文档|测试文档
AI生成功能测试文档:链接直达 计算机功能测试文档撰写教程 链接直达:生成功能测试文档工具 一、文档概述 (一)文档目的 明确计算机功能测试的流程、方法和标准,确保测试的有效性和可靠性,为软件的质量评…...
Python 常用模块(八):logging模块
目录 一、引言:日志模块在项目开发中的重要性二、从 Django 日志配置看 Logging 模块的核心组成三、logging模块核心组件详解3.1 记录器Logger3.2 级别Level3.3 根记录器使用3.4 处理器Handler3.5 格式化器Formatter3.6 日志流3.7 日志示例 四、日志模块总结 一、引…...
入门OpenTelemetry——可观测性与链路追踪介绍
可观测性 什么是可观测性 可观察性(Observability)是从外部输出知识中推断所获得,可理解为衡量一个系统内部状态的方法。可观测性是一种能力,它能帮助你回答系统内部发生了什么——无需事先定义每种可能的故障或状态。系统的可观…...
c#队列及其操作
可以用数组、链表实现队列,大致与栈相似,简要介绍下队列实现吧。值得注意的是循环队列判空判满操作,在用链表实现时需要额外思考下出入队列条件。 设计头文件 #ifndef ARRAY_QUEUE_H #define ARRAY_QUEUE_H#include <stdbool.h> #incl…...
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
前言 之前的文件分享过基于内存的STL缓存、环形缓冲区,以及基于文件的队列缓存mqueue、hash存储、向量库annoy存储,这两种属于比较原始且高效的方式。 那么,有没有高级且高效的方式呢。有的,从数据角度上看,࿰…...
77. 组合【 力扣(LeetCode) 】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 77. 组合 一、题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 二、测试用例 示例 1: 输入&…...
GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)
目录 背景一、算力困境:AI开发者的「三重诅咒」1.1 硬件成本黑洞1.2 资源调度失衡1.3 环境部署陷阱 二、三大核心技术突破GpuGeek的破局方案2.1 分时切片调度引擎(Time-Slicing Scheduler)2.2 异构计算融合架构2.3 AI资产自动化…...
LeetCode 热题 100_颜色分类(98_75_中等_C++)(技巧)(计数;双指针)
LeetCode 热题 100_颜色分类(98_75_中等_C) 题目描述:输入输出样例:题解:解题思路:思路一(计数):思路二(双指针): 代码实现代码实现&a…...
【前端】:单 HTML 去除 Word 批注
在现代办公中,.docx 文件常用于文档编辑,但其中的批注(注释)有时需要在分享或归档前被去除。本文将从原理出发,深入剖析如何在纯前端环境下实现对 .docx 文件注释的移除,并提供完整的实现源码。最后&#x…...
TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能
🖼️ 本文是TTS-Web-Vue系列的新篇章,重点介绍如何在Vue3项目中优雅地实现内嵌iframe功能,用于加载外部文档内容。通过Vue3的响应式系统和组件化设计,我们实现了一个功能完善、用户体验友好的文档嵌入方案,包括加载状态…...
AWS CloudTrail日志跟踪启用
问题 启用日志管理。 步骤 审计界面,如下图: 点击创建跟踪,AWS云就会记录AWS账号在云中的操作。...
PHP 编程:现代 Web 开发的基石与演进
引言 PHP(Hypertext Preprocessor)自1995年诞生以来,已成为全球最流行的服务器端脚本语言之一。尽管近年来Node.js、Python等语言在特定领域崭露头角,但PHP仍占据着超过78%的网站市场份额(W3Techs数据)。本…...
NAT/代理服务器/内网穿透
目录 一 NAT技术 二 内网穿透/内网打洞 三 代理服务器 一 NAT技术 跨网络传输的时候,私网不能直接访问公网,就引入了NAT能讲私网转换为公网进行访问,主要解决IPv4(2^32)地址不足的问题。 1. NAT原理 当某个内网想访问公网,就必…...
[已解决] VS Code / Cursor / Trae 的 PowerShell 终端 conda activate 进不去环境的常见问题
背景 PS C:\Users\Lenovo\WPSDrive\669715199_3\WPS云盘\课程\研一\ROAS5700 Robot Motion Planning and Control\Final\LaTex报告\final-v1> conda activate mpPS C:\Users\Lenovo\WPSDrive\669715199_3\WPS云盘\课程\研一\ROAS5700 Robot Motion Planning and Control\Fin…...
Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇
导读 今天我们来了解一下 Kuka API 的人声与伴奏分离功能。 所谓“人声伴奏分离”,顾名思义,就是将一段完整的音频拆分为两个独立的轨道:一个是人声部分,另一个是伴奏(乐器)部分。 这个功能在音乐创作和…...
深度伪造对知识产权保护的新挑战与应对之策
首席数据官高鹏律师团队 在科技的飞速发展带来了诸多便利的同时,也引发了一系列复杂的法律问题,其中深度伪造技术对知识产权保护的冲击尤为显著,亟待引起广泛关注与深入探讨。 深度伪造,简单来说,是借助先进的人工智…...
【嵌入式开发-软件定时器】
嵌入式开发-软件定时器 ■ 1.■ 2.■ 3.■ 4. ■ 1. ■ 2. ■ 3. ■ 4....
3天重庆和成都旅游规划
重庆和成都都是大城市,各自都有丰富的旅游资源。如果要在三天内两头都游览,可能需要合理安排时间,确保既能体验到重庆的特色,又能在成都游览主要景点。然而,考虑到交通时间,如果从重庆到成都需要一定的时间…...
JAVA中的文件操作
文章目录 一、文件认识(一)文件的分类(二)目录结构 二、文件操作(一)File类1.属性2.构造方法3.方法 (二)File类的具体使用1.文件路径的查看2.文件的基本操作(1࿰…...
深度解析网闸策略:构建坚固的网络安全防线
深度解析网闸策略:构建坚固的网络安全防线 在数字化浪潮中,网络安全已成为企业、机构乃至国家稳定发展的关键要素。随着网络攻击手段日益复杂多样,传统的网络安全防护措施难以满足日益增长的安全需求。网闸作为一种先进的网络安全设备&#x…...
【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
滑动窗口算法笔记
力扣209 题目分析:想象一个窗口遍历着这个数组,不断扩大右边界,让r。往窗口中添加数字: 此时我们找到了这个窗口,它的和满足了大于等于target的条件,题目让我求最短的,那么我们就尝试来缩短它&…...
Problem A: 歌手打分
1.题目描述 在歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。输入每个评委的评分,求某选手的得分…...
容器安全-核心概述
文章摘要 本文探讨了容器安全的四个核心类别,包括环境基础设施安全、镜像安全、运行时安全和生态安全。尽管 EDR 能提供主机安全层面的部分防护,但无法覆盖容器的镜像安全和生态安全。容器的镜像安全和生态安全问题,如镜像漏洞、恶意镜像、容…...
Golang实践录:在go中使用curl实现https请求
之前曾经在一个 golang 工程调用 libcur 实现 https的请求,当前自测是通过的。后来迁移到另一个小系统出现段错误,于是对该模块代码改造,并再次自测。 问题提出 大约2年前,在某golang项目使用libcurl进行https请求(参…...
nvrtc环境依赖
一 下载 1.1 添加nvidia的源(不同于pypi) pip install nvidia-pyindex 1.2 pip dowload 执行 pip download nvidia-cuda-runtime nvidia-cuda-python 会发现文件夹多了以下几个文件 而需要安装的则只有红框的三个文件, 二 安装 对红框的…...
【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统
GraspPicture 项目深度解析:基于图像分割的抓取点检测系统 一、项目概述项目特点 二、项目运行方式与执行步骤(一)环境准备(二)项目结构(三)执行步骤 三、重要逻辑代码解析(一&#…...
Redis持久化存储
我们知道Redis是将数据放在内存中的,那怎么做到持久化存储呢?很简单,就是内存存一份,硬盘也存一份.那么两个地方都存会不会影响效率?答案是影响是不大的,要看具体的策略.同时也要注意内存的数据和硬盘中的数据可能会有一点不同.这也是取决于策略的不同. Redis持久化存储的两个…...
网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/295e068b79314 【本章下载二】:https://pan.xunlei.com/s/VOQDXguH0DYPxrql5y2zlkhTA1?pwdg2nx# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析
前言 内容来源于抖音【哲玄前端】大佬的《大前端全栈实践》课程,此课程是从零开始做一个企业级的全栈应用框架。此框架是基于koa.js构建的服务引擎,对BFF层的框架封装,让我感受颇深。 整体elpis项目架构设计 elpis-core设计思路 可以看到elpi…...
计算机网络-MPLS LDP基础实验配置
前面我们学习了LDP的会话建立、标签发布与交换、LDP的工作原理,今天通过一个基础实验来加深记忆。 一、LDP基础实验 实验拓扑: 1、IGP使用OSPF进行通告,使用Lookback接口作为LSR ID,LDP ID自动生成。 2、实验目的:使…...
搜索二维矩阵 II
存储m和n,用i表示行,j表示列,i从最后一行开始遍历,j从0开始遍历,当前值比目标值小j,反之i-- class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int…...
C++中如何实现一个单例模式?
单利模式是指对象在整个程序中只有一个实例,提供一个访问方法供全局访问。实现单例模式有如下要求: 1.私有化构造函数:将构造函数定义为私有,以防外部通过构造函数创建其它实例。 2.静态实例:在内部提供一个静态实例…...
进程与线程
进程与线程:计算机世界的"公司与员工" 进程与线程的本质区别 进程(Process)是计算机中独立运行的程序实例,拥有自己的内存空间和系统资源;而线程(Thread)是进程内的执行单元,共享所属进程的资源,但拥有独立的执行路径。 🏢 生活类比:想象一个大型企业的运…...
JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践
JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践 Java开发与运维过程中,JDK自带的命令行工具是定位问题、性能调优、编译调试的基石。本文全面梳理JDK常用命令工具、帮助文档的获取方式,并总结类似Linux命令行的学习方法,助你系…...
行业趋势与技术创新:驾驭工业元宇宙与绿色智能制造
引言 制造业发展的新格局:创新势在必行 当今制造业正经历深刻变革,面临着供应链波动、个性化需求增长、可持续发展压力以及技能人才短缺等多重挑战。在这样的背景下,技术创新不再是可有可无的选项,而是企业保持竞争力、实现可持…...
代码随想录算法训练营第三十九天(打家劫舍专题) | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III
一、198.打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili 1. 思路 大家如…...
Linux514 rsync 解决方案环境配置
节点ab都改为NAT模式 网关和VMnet8网卡不一致 ping 不通外网 ping不通外网 是这里的问题吗 怎么突然就ping通了 没改啥啊 上面改了dhcp范围后 ping还是ping不通 为啥现在又ping通了 设置节点b 推测应该是dhcp范围问题 今日源码 节点b MX...
STM32F103_LL库+寄存器学习笔记23 - PWM波形输出及软件方式调整周期与占空比
导言 脉宽调制(PWM)是 STM32 定时器最常用的输出模式之一,广泛应用于电机驱动、LED 调光、伺服控制和功率管理等场景。本篇文章将以 TIM5 为例,从寄存器层面深入剖析 PWM 输出的原理与实现步骤。通过本篇博客,你不仅能…...
Canvas知识框架
一、Canvas基础 核心概念 Canvas是位图绘图区域,通过JavaScript(或Python等)动态绘制图形。 坐标系:左上角为原点 (0, 0),x向右递增,y向下递增。 绘图流程: const canvas document.getElemen…...
【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发
客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…...
spark小任务
import org.apache.spark.{Partitioner, SparkConf, SparkContext}object PartitionCustom {// 分区器决定哪一个元素进入某一个分区// 目标: 把10个分区器,偶数分在第一个分区,奇数分在第二个分区// 自定义分区器// 1. 创建一个类继承Partitioner// 2. …...
git push 报错:send-pack: unexpected disconnect while reading sideband packet
背景 新建了一个仓库,第一次push 代码文件,文件中有一个依赖的jar,有80MB,结果push的时候报错。 错误信息 error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500 send-pack: unexpected disconnect whi…...
读入csv文件写入MySQL
### 使用 Spark RDD 读取 CSV 文件并写入 MySQL 的实现方法 #### 1. 环境准备 在使用 Spark 读取 CSV 文件并写入 MySQL 数据库之前,需要确保以下环境已配置完成: - 添加 Maven 依赖项以支持 JDBC 连接。 - 配置 MySQL 数据库连接参数,包括 …...
5.18-AI分析师
强化练习1 神经网络训练案例(SG) #划分数据集 #以下5行需要背 folder datasets.ImageFolder(rootC:/水果种类智能训练/水果图片, transformtrans_compose) n len(folder) n1 int(n*0.8) n2 n-n1 train, test random_split(folder, [n1, n2]) #训…...