当前位置: 首页 > news >正文

MySQL函数触发:函数处理与触发器自动化应用

引言

各位数据库爱好者们好!今天我们要探索MySQL中两个强大的自动化工具——函数和触发器 🚀。函数就像数据库中的"瑞士军刀",能帮你高效处理各种数据;而触发器则是数据库的"自动感应器",能在数据变化时自动执行操作。掌握这些功能,你将能构建更加智能、自动化的数据库系统!本教程将带你从内置函数到自定义开发,从触发器基础到高级应用,全面提升你的MySQL自动化技能!💪


一、MySQL内置函数大全

1.1 字符串处理函数:文本操作利器

字符串函数就像文字编辑工具,帮你轻松处理文本数据 ✂️:

常用字符串函数

-- 连接字符串
SELECT CONCAT('Hello', ' ', 'World');  -- Hello World
SELECT CONCAT_WS('-', '2023', '01', '01');  -- 2023-01-01-- 大小写转换
SELECT LOWER('MySQL');  -- mysql
SELECT UPPER('mysql');  -- MYSQL-- 截取与填充
SELECT SUBSTRING('2023-01-15', 6, 2);  -- 01
SELECT LPAD(5, 3, '0');  -- 005
SELECT TRIM('  MySQL  ');  -- MySQL-- 查找与替换
SELECT INSTR('MySQL', 'SQL');  -- 3
SELECT REPLACE('I use Oracle', 'Oracle', 'MySQL');  -- I use MySQL-- 正则表达式(MySQL 8.0+)
SELECT REGEXP_LIKE('abc123', '^[a-z]+[0-9]+$');  -- 1
SELECT REGEXP_REPLACE('abc123', '[0-9]', 'X');  -- abcXXX

1.2 数值计算函数:数学运算专家

数值函数就像计算器,帮你完成各种数学运算 🧮:

常用数值函数

-- 基本运算
SELECT ABS(-10);  -- 10
SELECT MOD(15, 4);  -- 3
SELECT POW(2, 3);  -- 8
SELECT ROUND(3.1415, 2);  -- 3.14
SELECT TRUNCATE(3.1415, 2);  -- 3.14 (直接截断)-- 随机数
SELECT RAND();  -- 0-1之间的随机数
SELECT FLOOR(1 + RAND() * 10);  -- 1-10的随机整数-- 数学函数
SELECT SQRT(16);  -- 4
SELECT LOG(2, 8);  -- 3
SELECT SIN(PI()/2);  -- 1-- 聚合函数
SELECT AVG(salary) FROM employees;
SELECT SUM(quantity*price) FROM order_items;

1.3 日期时间函数:时间管理大师

日期函数就像日历和闹钟,帮你处理时间数据 ⏰:

常用日期函数

-- 当前时间
SELECT NOW();  -- 2023-01-15 14:30:00
SELECT CURDATE();  -- 2023-01-15
SELECT CURTIME();  -- 14:30:00-- 日期解析
SELECT YEAR('2023-01-15');  -- 2023
SELECT MONTHNAME('2023-01-15');  -- January
SELECT DAYOFWEEK('2023-01-15');  -- 1(周日)-- 日期计算
SELECT DATE_ADD('2023-01-15', INTERVAL 1 MONTH);  -- 2023-02-15
SELECT DATEDIFF('2023-01-20', '2023-01-15');  -- 5
SELECT LAST_DAY('2023-01-15');  -- 2023-01-31-- 格式化
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s');  -- 2023年01月15日 14:30:00
SELECT TIME_FORMAT('14:30:00', '%h:%i %p');  -- 02:30 PM

二、自定义函数:打造专属工具

2.1 创建自定义函数

自定义函数就像DIY工具,满足你的特殊需求 🛠️:

基本语法

DELIMITER //CREATE FUNCTION 函数名(参数 数据类型, ...)
RETURNS 返回值类型
[DETERMINISTIC|NOT DETERMINISTIC]
BEGIN-- 函数体RETURN 返回值;
END //DELIMITER ;

实际示例

-- 创建计算税后工资的函数
DELIMITER //CREATE FUNCTION calculate_net_salary(gross_salary DECIMAL(10,2),tax_rate DECIMAL(5,2)
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGINDECLARE net_salary DECIMAL(10,2);SET net_salary = gross_salary * (1 - tax_rate/100);RETURN net_salary;
END //DELIMITER ;

调用自定义函数

SELECT employee_id,salary,calculate_net_salary(salary, 20) AS net_salary
FROM employees;

2.2 函数特性与限制

函数特性

  • 必须使用RETURN语句返回值
  • 可以调用其他函数或存储过程
  • 支持递归调用(有深度限制)
  • 可以是确定性(DETERMINISTIC)或非确定性函数

与存储过程的区别

特性函数存储过程
返回值必须返回一个值可以没有或多个OUT参数
调用方式在SQL语句中直接调用使用CALL语句调用
事务控制不能包含事务语句可以包含完整事务
结果集不能返回结果集可以返回多个结果集

三、触发器:自动化数据守护者

3.1 触发器基础与创建

触发器就像数据库的"自动感应器",在数据变化时自动执行操作 🤖:

基本语法

DELIMITER //CREATE TRIGGER 触发器名
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 表名 FOR EACH ROW
BEGIN-- 触发器逻辑
END //DELIMITER ;

实际示例

-- 创建审计日志触发器
DELIMITER //CREATE TRIGGER audit_employee_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGINIF NEW.salary <> OLD.salary THENINSERT INTO salary_change_logs(employee_id,old_salary,new_salary,change_time) VALUES (NEW.employee_id,OLD.salary,NEW.salary,NOW());END IF;
END //DELIMITER ;

3.2 NEW与OLD关键字

在触发器中可以访问特殊记录:

  • INSERT触发器:只有NEW可用
  • UPDATE触发器:NEW和OLD都可用
  • DELETE触发器:只有OLD可用

使用示例

-- 确保价格调整不超过10%
DELIMITER //CREATE TRIGGER validate_price_change
BEFORE UPDATE ON products
FOR EACH ROW
BEGINDECLARE max_change DECIMAL(5,2);SET max_change = 0.10;  -- 最大10%变化IF ABS((NEW.price - OLD.price) / OLD.price) > max_change THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = '价格调整幅度不能超过10%';END IF;
END //DELIMITER ;

3.3 触发器管理

查看触发器

SHOW TRIGGERS;
SHOW TRIGGERS FROM database_name;
SHOW CREATE TRIGGER trigger_name;

修改触发器
MySQL不支持直接修改触发器,必须先删除再重建:

DROP TRIGGER IF EXISTS trigger_name;
-- 然后重新创建

四、触发器高级应用场景

4.1 数据完整性维护

级联非主键更新

DELIMITER //CREATE TRIGGER cascade_department_name
AFTER UPDATE ON departments
FOR EACH ROW
BEGINIF NEW.department_name <> OLD.department_name THENUPDATE employeesSET department_name = NEW.department_nameWHERE department_id = NEW.department_id;END IF;
END //DELIMITER ;

4.2 自动计算派生列

维护订单总金额

DELIMITER //CREATE TRIGGER update_order_total
AFTER INSERT ON order_items
FOR EACH ROW
BEGINUPDATE ordersSET total_amount = (SELECT SUM(quantity*price) FROM order_items WHERE order_id = NEW.order_id)WHERE order_id = NEW.order_id;
END //DELIMITER ;

4.3 业务规则实施

限制库存不能为负

DELIMITER //CREATE TRIGGER prevent_negative_inventory
BEFORE UPDATE ON products
FOR EACH ROW
BEGINIF NEW.stock_quantity < 0 THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = '库存数量不能为负数';END IF;
END //DELIMITER ;

五、函数与触发器实战案例

5.1 完整审计系统实现

创建审计表

CREATE TABLE audit_log (log_id INT AUTO_INCREMENT PRIMARY KEY,table_name VARCHAR(50) NOT NULL,record_id INT NOT NULL,action ENUM('INSERT','UPDATE','DELETE') NOT NULL,change_time DATETIME NOT NULL,user_name VARCHAR(50) NOT NULL,old_data JSON,new_data JSON
);

创建通用审计触发器

DELIMITER //CREATE TRIGGER audit_employee_changes
AFTER INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW
BEGINDECLARE v_action VARCHAR(10);DECLARE v_user VARCHAR(50);-- 确定操作类型IF INSERTING THENSET v_action = 'INSERT';ELSEIF UPDATING THENSET v_action = 'UPDATE';ELSESET v_action = 'DELETE';END IF;-- 获取当前用户SET v_user = CURRENT_USER();-- 插入审计记录INSERT INTO audit_log (table_name,record_id,action,change_time,user_name,old_data,new_data) VALUES ('employees',COALESCE(NEW.employee_id, OLD.employee_id),v_action,NOW(),v_user,CASE WHEN v_action IN ('UPDATE','DELETE') THEN JSON_OBJECT('employee_id', OLD.employee_id,'first_name', OLD.first_name,'last_name', OLD.last_name,'salary', OLD.salary)ELSE NULL END,CASE WHEN v_action IN ('INSERT','UPDATE') THEN JSON_OBJECT('employee_id', NEW.employee_id,'first_name', NEW.first_name,'last_name', NEW.last_name,'salary', NEW.salary)ELSE NULL END);
END //DELIMITER ;

5.2 数据加密函数实现

创建加密函数

DELIMITER //CREATE FUNCTION encrypt_data(plain_text VARCHAR(255),secret_key VARCHAR(32)
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN-- 简单加密示例(实际项目应使用更强加密)DECLARE encrypted_text VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 1;DECLARE len INT;DECLARE key_len INT;SET len = LENGTH(plain_text);SET key_len = LENGTH(secret_key);WHILE i <= len DOSET encrypted_text = CONCAT(encrypted_text,CHAR(ASCII(SUBSTRING(plain_text, i, 1)) + ASCII(SUBSTRING(secret_key, (i % key_len) + 1, 1)));SET i = i + 1;END WHILE;RETURN encrypted_text;
END //DELIMITER ;-- 配套的解密函数
DELIMITER //CREATE FUNCTION decrypt_data(encrypted_text VARCHAR(255),secret_key VARCHAR(32)
RETURNS VARCHAR(255)
DETERMINISTIC
BEGINDECLARE plain_text VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 1;DECLARE len INT;DECLARE key_len INT;SET len = LENGTH(encrypted_text);SET key_len = LENGTH(secret_key);WHILE i <= len DOSET plain_text = CONCAT(plain_text,CHAR(ASCII(SUBSTRING(encrypted_text, i, 1)) - ASCII(SUBSTRING(secret_key, (i % key_len) + 1, 1)));SET i = i + 1;END WHILE;RETURN plain_text;
END //DELIMITER ;

总结 🎯

通过本教程,我们系统学习了MySQL函数和触发器的强大功能 🎓:

  1. 内置函数:掌握了字符串、数值、日期等各类内置函数的使用
  2. 自定义函数:学会了创建和使用自定义函数解决特定问题
  3. 触发器基础:理解了触发器的创建语法和基本应用
  4. 高级应用:探索了触发器在数据完整性、业务规则等方面的应用

关键收获

  • 函数是代码复用的重要手段
  • 触发器能实现自动化数据管理
  • NEW和OLD是触发器的特殊记录访问方式
  • 合理使用函数和触发器可以简化应用逻辑

最佳实践建议

  1. 为函数和触发器使用清晰的命名规范
  2. 添加充分的注释说明逻辑
  3. 避免在触发器中执行耗时操作
  4. 考虑性能影响,不要过度使用触发器

下一步学习建议

  1. 在实际项目中应用所学函数和触发器
  2. 学习MySQL事件调度器实现定时任务
  3. 探索存储引擎的更高级特性
  4. 研究数据库设计模式和优化策略

PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄

相关文章:

MySQL函数触发:函数处理与触发器自动化应用

引言 各位数据库爱好者们好&#xff01;今天我们要探索MySQL中两个强大的自动化工具——函数和触发器 &#x1f680;。函数就像数据库中的"瑞士军刀"&#xff0c;能帮你高效处理各种数据&#xff1b;而触发器则是数据库的"自动感应器"&#xff0c;能在数据…...

数据可视化热图工具:Python实现CSV/XLS导入与EXE打包

在数据分析工作中,热图(Heatmap)是一种非常直观的可视化工具,能够清晰展示数据矩阵中的数值分布和相关性。本文将介绍如何使用Python构建一个支持CSV/XLS文件导入、热图生成并可打包为EXE的桌面应用程序。 核心功能设计 我们的热图工具将包含以下核心功能: 支持CSV和Excel…...

CUDA Stream的进阶用法:流水线并行的资源竞争解决方案

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 引言&#xff1a;多任务推理场景的挑战 GPU在AI推理服务器的典型负载特征&#xff08;并行模…...

Eclipse Java 开发调优:如何让 Eclipse 运行更快?

Eclipse Java 开发调优&#xff1a;如何让 Eclipse 运行更快&#xff1f; 在 Java 开发领域&#xff0c;Eclipse 是一款被广泛使用的集成开发环境&#xff08;IDE&#xff09;。然而&#xff0c;随着项目的日益庞大和复杂&#xff0c;Eclipse 的运行速度可能会逐渐变慢&#x…...

大模型(1)——基本概念

文章目录 一、大模型的定义与概念二、大模型的原理与技术核心三、大模型的应用领域四、市面上常用的大模型1. 生成类模型&#xff08;文本/代码/图像&#xff09;2. 理解类模型&#xff08;文本/语义&#xff09;3. 多模态模型4. 国产大模型 五、总结与趋势 一、大模型的定义与…...

MYSQL故障排查和环境优化

一、MySQL故障排查 1. 单实例常见故障 &#xff08;1&#xff09;连接失败类问题 ERROR 2002 (HY000): Cant connect to MySQL server 原因&#xff1a;MySQL未启动或端口被防火墙拦截。 解决&#xff1a;启动MySQL服务&#xff08;systemctl start mysqld&#xff09;或开放…...

sts下载安装

windows下STS&#xff08;Spring Tools Suite&#xff0c;自带spring插件的eclipse&#xff09;的下载与安装_sts下载-CSDN博客Spring Boot安装与配置教程_spring boot安装配置-CSDN博客...

Baklib知识中台架构设计与智能服务实践

知识中台架构四库体系解析 现代企业知识管理系统的核心在于构建结构化知识资产池&#xff0c;Baklib通过独创的四库体系——知识库、流程库、案例库、模型库——实现知识资源的全生命周期管理。其中&#xff0c;知识库作为基础层&#xff0c;聚合文档、图谱等显性知识&#xf…...

TinyEngine 2.5版本正式发布:多选交互优化升级,页面预览支持热更新,性能持续跃升!

前言 TinyEngine低代码引擎使开发者能够定制低代码平台。它是低代码平台的底座&#xff0c;提供可视化搭建页面等基础能力&#xff0c;既可以通过线上搭配组合&#xff0c;也可以通过cli创建个人工程进行二次开发&#xff0c;实时定制出自己的低代码平台。适用于多场景的低代码…...

嵌入式系统:技术演进、应用领域发展趋势全面解析

嵌入式系统&#xff1a;技术演进、应用领域及发展趋势全面解析 一、引言 在当今数字化时代&#xff0c;嵌入式系统已悄然融入到我们生活的方方面面&#xff0c;从日常使用的智能手机、智能家电&#xff0c;到汽车中的各种控制系统&#xff0c;乃至工业生产中的自动化设备、航…...

软件工程-项目管理

进度管理 又叫时间管理&#xff0c;确定进度目标&#xff0c;在与质量、成本目标协调的基础上&#xff0c;实现工期目标 具体包括以下过程&#xff1a; 活动定义&#xff1a;确定完成各项交付成果需要展开的具体活动活动排序&#xff1a;活动之间的先后关系和逻辑关系活动资…...

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(二)爆炸效果修改图元类型

1. 爆炸效果 这是几何着色器中的一个常见应用&#xff0c;我们使用几何着色器来模拟爆炸效果。 我们希望将每个三角形沿其表面法向量向外移动&#xff0c;则实际上是将组成环面的三角形向外“爆炸”。 我们只需取三个顶点的法向量&#xff0c;然后将其相加并求平均&#xff…...

需求频繁变更?AI 驱动的自动化解决方案实践

在软件开发的实际场景中&#xff0c;需求频繁变更已成为困扰开发团队的常见难题。每一次需求变动&#xff0c;都意味着代码的重新编写、调试与测试&#xff0c;不仅消耗大量时间和人力成本&#xff0c;还可能引发一系列连锁反应&#xff0c;影响项目进度与质量。而飞算 JavaAI …...

ffmpeg转码后的视频有横条纹和彩虹横条等乱彩问题

原因&#xff1a;ffmpeg安装的时&#xff0c;./configure 添加了–disable-asm参数&#xff0c;导致色彩异常。 **解决方法&#xff1a;**移除该参数–disable-asm。 注意&#xff1a;不加该参数可能提示no yasm或nasm等问题&#xff0c;解决该问题即可。大多是环境变量没有配置…...

QT6 源(111):阅读与注释菜单栏 QMenuBar,进行属性与成员函数测试,信号与槽函数测试,并给出源码

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; &#xff08;4&#xff09; &#xff08;5&#xff09; &#xff08;6&#xff09; &#xff08;7&#xff09;以下源代码来自于头文件 qmenubar . h &#xff1a; #ifndef QMENUBAR_H #defi…...

达梦数据库对json字段进行操作

在达梦数据库中&#xff0c;字段类型不能显式定义为JSON&#xff0c;通常以VARCHAR或TEXT类型存储JSON字符串&#xff0c;可以通过内置的JSON函数对JSON格式数据进行操作和条件过滤。 1. 创建表并插入JSON数据 假设字段类型为VARCHAR&#xff0c;存储JSON字符串&#xff1a; -…...

基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,相机分类,二手相机 开题报告内容 基于FlaskVue框架的东莞市二手相机交易管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着数字技术的迅猛发展和摄影文化的广泛普及&#xff0c;相机已成为人们记录生活、表达创意的重要工…...

谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频

近期&#xff0c;谷歌旗下的 NotebookLM 即将推出一项令人瞩目的新功能 ——Sparks 视频概览。这一功能借助 Gemini 与 Deep Research 的强大能力&#xff0c;能够生成 1 - 3 分钟的 AI 视频&#xff0c;为用户带来全新的内容创作与信息获取体验。 NotebookLM&#xff1a;AI 笔…...

MCP详解

前言:AI能力跃迁的“最后一公里” 当前,大语言模型(LLMs)已展现出文本生成、逻辑推理等通用能力,但其与真实世界的交互仍存在瓶颈。传统模式下,开发者需为每个外部工具(如数据库、API、文件系统)编写定制化接口,导致开发周期长、兼容性差、安全风险高。而​​模型上下…...

信息学奥赛一本通 1539:简单题 | 洛谷 P5057 [CQOI2006] 简单题

【题目链接】 ybt 1539&#xff1a;简单题 洛谷 P5057 [CQOI2006] 简单题 【题目考点】 1. 树状数组 模板题及讲解&#xff1a;洛谷 P3374 【模板】树状数组 【解题思路】 解法1&#xff1a;树状数组 该有01构成数组初值都为0。 某位置的元素被修改奇数次后值为1&#x…...

设计模式-面试题

摘要&#xff1a; 1、通俗易懂&#xff0c;适合小白 2、仅做面试复习用&#xff0c;部分来源网络&#xff0c;博文免费&#xff0c;知识无价&#xff0c;侵权请联系&#xff01; 1. 什么是设计模式&#xff1f; 设计模式是在软件开发过程中&#xff0c;针对反复出现的问题所…...

upload-labs靶场通关详解:第11关

一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array("php","php5","php4","php3","php2","html","htm","phtml"…...

excel:时间戳格式与日期格式的互转

13位时间戳转日期时间&#xff08;毫秒&#xff09; 假设A2单元格内容为13位的时间戳&#xff0c;再选中B2单元格&#xff0c;在公式框中输入 TEXT((A2/10008*3600)/8640070*36519,"yyyy/mm/dd hh:mm:ss.000")接下来&#xff0c;选中B2单元格&#xff0c;下拉应用公…...

嵌套式向量中断控制器(NVIC)

1.概述 2. NVIC 的中断处理机制 3. NVIC 中断管理机制 1.概述 中断控制器是ARMv7-M 异常模型的核心组成部分。该中断控制器的运行遵循 ARM 通用中断控制器(GIC)规范,该规范也适用于其他 ARMv7 架构配置和其他处理器架构。 ARMv7-M 的 NVIC(嵌套向量中断控制器)架构支持最…...

2025.05.19【Barplot】柱状图的多样性绘制

Custom color A few examples showing how to custom barplot color. Horizontal barchart It makes sense to make your barchart horizontal: group labels are now much easier to read 文章目录 Custom colorHorizontal barchart 探索Barplot的奥秘Barplot基础什么是Barp…...

MongoDB的管道聚合

管道聚合可以实现很多数据处理和统计功能&#xff0c;并且随着不断的更新&#xff0c;其功能也越来越丰富。代表着NoSQL数据库的一种发展趋势。 管道聚合通过aggregate语句实现&#xff0c;支持多种匹配、处理、输出方式。 其语法是&#xff1a; db.<collection>.aggr…...

基于 STM32 的自动温度巡检小车控制系统设计与实现

一、引言 在工业监控、仓储管理及环境监测等场景中,自动温度巡检系统具有重要应用价值。本文设计一种基于 STM32 单片机的自动温度巡检小车,通过集成温度采集、路径规划及数据处理功能,实现对目标区域的实时温度监测与异常报警,为智能化环境监控提供低成本解决方案。 二、…...

怎么利用JS根据坐标判断构成单个多边形是否合法

怎么利用JS根据坐标判断构成单个多边形是否合法 引言 在GIS(地理信息系统)、游戏开发、计算机图形学等领域,判断一组坐标点能否构成合法的简单多边形(Simple Polygon)是一个常见需求。合法多边形需要满足几何学上的基本规则,本文将详细介绍如何使用JavaScript实现这一判…...

20. 自动化测试框架开发之Excel配置文件的IO开发

20.自动化测试框架开发之Excel配置文件的IO开发 一、核心架构解析 1.1 类继承体系 class File: # 文件基类# 基础文件验证和路径管理class ExcelReader(File): # Excel读取器# 实现Excel数据解析逻辑1.2 版本依赖说明 # 必须安装1.2.0版本&#xff08;支持xlsx格式&#…...

高校快递物流管理系统设计与实现(SpringBoot+MySQL)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

python-leetcode 67.寻找两个正序数组中的中位数

题目&#xff1a; 给定两个大小分别为m和n的正序&#xff08;从小到大&#xff09;数组nums1和nums2。请找出并返回这两个正序数组的中位数。 通过双指针和二分查找的思想&#xff0c;找到两个有序数组的中位数。 1.初始化和基本情况处理 首先获取两个个数组的长度m和n,计算…...

Python 实现图片浏览和选择工具

实现将截图预览&#xff0c;并按照顺序加入一个pdf文件中&#xff0c;实现照片管理尤其对于喜欢看教程截图做笔记的网友们。 C:\pythoncode\new\python-image-pdf-processor.py 界面展示 &#x1f9f1; 一、核心结构概述 主类 ImageViewer(wx.Frame) 是主窗口类&#xff0c;…...

V4L2应用程序开发-01数据采集流程

1 数据采集流程 可以参考这些文件&#xff1a; mjpg-streamer\mjpg-streamer-experimental\plugins\input_control\input_uvc.c video2lcd\video\v4l2.c Video for Linux two(Video4Linux2)简称V4L2&#xff0c;是V4L的改进版。V4L2支持三种方式来采集图像&#xff1a;内存…...

TDengine 2025年产品路线图

TDengine OSS 之 2025 年年度路线图如下表所示。 季度功能2025Q1 虚拟表查询能力&#xff1a;REGEXP、GREATEST、LEAST、CAST 函数支持判断表达式、单行选择函数的其他列值、INTERP 支持插值时间范围存储能力&#xff1a;支持将查询结果写入超级表、超级表支持 KEEP 参数、STM…...

Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览

文章目录 前言SceneCaptureComponent2D实现步骤新建渲染目标新建材质UI控件激活3DPreview鼠标拖动旋转模型最后前言 我们在(电商展示/角色预览/装备查看)等应用场景中,经常会看到这种3D展示的页面。 即使用相机捕获一个3D的模型的视图,然后把这个视图显示在一个UI画布上,…...

windows服务器部署jenkins工具

sjenkins作为一款构建发布工具&#xff0c;极大的简化了大家项目部署发布流程。jenkins通常是部署在linux服务上&#xff0c;今天给大家分享的是windows服务器上如何搭建jenkins发布工具。 1.首先第一步还是看windows安装docker 这篇文章哈&#xff0c;当然也可以不采用docker…...

Java—— File详解

说明 File对象就表示一个路径&#xff0c;可以是文件的路径、也可以是文件夹的路径 这个路径可以是存在的&#xff0c;也允许是不存在的 获取File对象 方法名称说明public File(String pathname)根据文件路径创建文件对象public File(String parent,String child)根据父路径名…...

「NameCraft · 幻想命名器」开发记:我和 CodeBuddy 的一次奇幻共创之旅

起心动念&#xff1a;我想做一个不一样的名字生成器 最近我有一个脑洞&#xff1a;能不能做一个风格化强烈的名字生成器&#xff1f;不要那种平平无奇的「小明、小红」类型&#xff0c;而是支持「幻想风」「武侠感」「赛博感」的那种&#xff0c;最好还有高颜值的 UI&#xff…...

03 接口自动化-精通Postman之接口鉴权,接口Mock,接口加解密以及接口签名Sign

文章目录 一、接口鉴权&#xff08;鉴定是否有访问接口的权限&#xff09;1、cookie&#xff0c;session&#xff0c;token鉴权。2、Postman的鉴权方式 二、接口Mock Sersver三、接口的加解密四、接口签名sign&#xff08;接口鉴权的一种&#xff09;1.什么是接口签名&#xff…...

深入浅出IIC协议 -- 第二篇:FPGA数字接口设计方法论

第二篇&#xff1a;FPGA数字接口设计方法论 副标题 &#xff1a;从状态机到跨时钟域——打造工业级I2C控制器的设计密码 1. 状态机设计黄金法则 1.1 状态机类型抉择 Mealy与Moore对比实验 &#xff1a; 类型输出依赖时序特性I2C适用场景Moore仅当前状态延迟稳定协议主状态控…...

20250519使用TF卡将NanoPi NEO core开发板刷机为Ubuntu core22.04.3系统完成之后执行poweroff自动关机

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5_WinE…...

什么是USB的EHCI和OHCI

USB的EHCI和OHCI是两种不同的主机控制器接口标准&#xff0c;用于规范计算机如何通过硬件和软件与USB设备通信。它们分别对应不同的USB协议版本和设备类型&#xff0c;以下是详细解析&#xff1a; 1. OHCI&#xff08;Open Host Controller Interface&#xff09; • 定位&…...

【2025最新版】Origin安装教程 - 超详细Origin2024中文版图文教程(保姆级附带Origin安装包)

文章目录 前言Origin安装前的必要准备Origin安装包获取Origin安装图文步骤第一步&#xff1a;解压安装包第二步&#xff1a;启动安装程序第三步&#xff1a;安装向导操作第四步&#xff1a;填写注册信息第五步&#xff1a;选择安装位置第六步&#xff1a;功能选择与安装第七步&…...

【网络编程】十二、两万字详解 IP协议

文章目录 Ⅰ. 基本概念1、网络层解决的问题2、保证数据可靠的从一台主机送到另一台主机的前提3、路径选择4、主机和路由器的区别 Ⅱ. IP协议格式IP如何将报头与有效载荷进行分离&#xff1f;IP如何决定将有效载荷交付给上层的哪一个协议&#xff1f;理解socket编程 Ⅲ. 分片与组…...

【机器学习】线性回归和损失函数

线性回归 1.什么是线性回归&#xff1f; 线性回归指的就是将一些输入项乘以相应的权重系数&#xff0c;然后相加得到输出结果。线性回归是机器学习中一种有监督学习的算法,回归问题主要研究的是因变量与一个或多个自变量之间的关系。 在学习线性回归知识之前&#xff0c;我们…...

ip与mac-数据包传输过程学习

你管这破玩意叫网络&#xff1f; 内容来源于飞天闪客&#xff0c;以前没有学习过网络的相关基础知识&#xff0c;只会去瞎设置&#xff0c;现在终于是弄明白了。 多台电脑之间想要通信&#xff0c;可以直接通过一条网线进行连接。但是随着网线的增加&#xff0c;这个就会比较…...

【Qwen开源】WorldPM: 扩展人类偏好建模

受语言建模中的缩放定律启发&#xff0c;该定律展示了测试损失如何随着模型和数据集的规模呈幂律关系扩展&#xff0c;我们发现类似的定律也存在于偏好建模中。我们提出了世界偏好建模&#xff08;WorldPM&#xff09;来强调这种扩展潜力&#xff0c;其中世界偏好体现了人类偏好…...

如何设计一个二级缓存(Redis+Caffeine)架构?Redis 6.0多线程模型如何工作?

一、二级缓存&#xff08;RedisCaffeine&#xff09;架构设计 1. 设计目标 通过「本地缓存&#xff08;Caffeine&#xff09; 分布式缓存&#xff08;Redis&#xff09;」的分层结构&#xff0c;实现&#xff1a; 低延迟&#xff1a;热点数据本地缓存&#xff08;内存级访问…...

MYSQL8.0常用窗口函数

MYSQL8.0常用窗口函数 一、窗口函数的基本概念 窗口函数&#xff0c;顾名思义&#xff0c;就是在查询结果集中定义一个“窗口”&#xff0c;在这个窗口内进行数据的计算和分析。与普通聚合函数不同&#xff0c;普通聚合函数会将结果集分组并返回每组的单一汇总值&#xff0c;…...

【Pandas】pandas DataFrame pct_change

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...