MySQL《事务》
文章目录
- 前言
- 一、什么是事务?
- 二、事务的ACID特性
- 三、如何使用事务?
- 3.1 查看支持事务的存储引擎
- 3.2 语法
- 3.3 开启一个事务,执行修改后回滚
- 3.4 开启一个事务,执行修改后提交
- 3.5 保存点
- 3.6 自动/手动提交事务
- 四、事务的隔离性和隔离级别
- 4.1 什么是隔离性
- 4.2 隔离级别
- 4.2.1 READ UNCOMMITTED 读未提交
- 4.2.2 READ COMMITTED 读已提交
- 4.2.3 REPEATABLE READ 可重复读
- 4.2.4 SERIALIZABLE 串行化
- 4.2.5 对比总结
- 总结
前言
文章中很多概念的来源>>概念来源
一、什么是事务?
事务把⼀组SQL语句打包成为一个整体,在这组SQL的执行过程中,要么全部成功,要么全部失败。
比如小明向小李转账100块钱,那么小明的账户要扣除100,小李的账户要增加100,不能小明扣钱了而小李没有收到,也不能两人合计的金额发生改变,不能被其他转账事务干扰,同时记录应该存储起来便于查找,这就涉及到事务的ACID特性了
二、事务的ACID特性
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
三、如何使用事务?
3.1 查看支持事务的存储引擎
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务
show engines
3.2 语法
开启事务
# 显式地开启一个事务
BEGIN
# 或者
START TRANSACTION
提交事务
# 提交事务,并使已对数据库进行的所有修改成为永久性的
COMMIT
# 或者
COMMIT WORK
回滚
# 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
ROLLBACK
# 或者
ROLLBACK WORK
3.3 开启一个事务,执行修改后回滚
执行例子的代码
create table bank_account (id bigint primary key auto_increment,name varchar(255) not null, # 姓名balance decimal(10,2) not null # 余额
);
insert into bank_account(name,balance) values('张三',1000);
insert into bank_account(name,balance) values('李四',1000);select * from bank_account;
开启事务
start transaction
修改事务
# 修改前
select * from bank_account
update bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 修改后
select * from bank_account
执行回滚
# 执行回滚,事务结束
rollback
# 回滚后
select * from bank_account
整体代码
start transaction# 修改前
select * from bank_accountupdate bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 修改后
select * from bank_account# 执行回滚,事务结束
rollback# 回滚后
select * from bank_account
3.4 开启一个事务,执行修改后提交
与上面的回滚代码类似
开启事务
begin
修改事务
# 修改前
select * from bank_account
update bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 修改后
select * from bank_account
执行提交
# 执行提交,事务结束
commit
# 提交后
select * from bank_account
整体代码
# 开启事务
begin# 修改前
select * from bank_accountupdate bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 修改后
select * from bank_account# 执行提交,事务结束
commit# 提交后
select * from bank_account
3.5 保存点
在事务执行的过程中设置保存点,回滚时指定保存点可以把数据恢复到保存点的状态。
开启事务
# 开启事务
begin# 修改前
select * from bank_account
修改事务
update bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 修改后
select * from bank_account
设置第一个保存点
# 设置保存点
savepoint savepoint1;
再次修改事务
# 再次执行让张三-100,李四+100
update bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 第二次修改后
select * from bank_account
设置第二个保存点
插入新数据
# 插入数据后
select * from bank_account
回滚到第二个保存点
# 回滚到第二个保存点
rollback to savepoint2;select * from bank_account
回滚到第一个保存点
# 回滚到第一个保存点
rollback to savepoint1;select * from bank_account
回滚到事务最初状态
# 回滚时不指定保持点,直接回滚到事务最开始的状态,事务结束
rollback
select * from bank_account
完整代码
# 开启事务
begin# 修改前
select * from bank_accountupdate bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 修改后
select * from bank_account# 设置保存点
savepoint savepoint1;# 再次执行让张三-100,李四+100
update bank_account set balance = balance - 100 where name = '张三';
update bank_account set balance = balance + 100 where name = '李四';# 第二次修改后
select * from bank_account# 设置第二个保存点
savepoint savepoint2;# 插一条新记录
insert into bank_account(name,balance) values('王五',1000)# 插入数据后
select * from bank_account# 回滚到第二个保存点
rollback to savepoint2;select * from bank_account# 回滚到第一个保存点
rollback to savepoint1;select * from bank_account# 回滚时不指定保持点,直接回滚到事务最开始的状态,事务结束
rollbackselect * from bank_account
3.6 自动/手动提交事务
默认情况下,MySQL是自动提交事务的,也就是说我们执行的每个修改操作,比如插入、更新和删除,都会自开启一个事务并在语句执行完成之后自动提交,发生异常时自动回滚。
查看当前事务是否为自动提交
show variables like 'autocommit'
可以通过以下语句设置事务为自动或手动提交
# 设置事务自动提交
SET AUTOCOMMIT=1; # 方式一
SET AUTOCOMMIT=ON; # 方式二
# 设置事务⼿动提交
SET AUTOCOMMIT=0; # 方式一
SET AUTOCOMMIT=OFF; # 方式二
注意:
- 只要使用 START TRANSACTION 或 BEGIN 开启事务,必须要通过 COMMIT 提交才会持久化,与是否设置 SET AUTOCOMMIT 无关。
- 手动提交模式下,不用显示开启事务,执行修改操作后,提交或回滚事务时直接使用 commit或 rollback
- 已提交的事务不能回滚
四、事务的隔离性和隔离级别
4.1 什么是隔离性
MySQL服务可以同时被多个客户端访问,每个客户端执行的DML语句以事务为基本单位,那么不同的客户端在对同一张表中的同一条数据进行修改的时候就可能出现相互影响的情况,为了保证不同的事务之间在执行的过程中不受影响,那么事务之间就需要要相互隔离,这种特性就是隔离性。
4.2 隔离级别
在MySQL的InnoDB引擎中事务的隔离级别有四种,分别是:
- READ UNCOMMITTED ,读未提交
- READ COMMITTED ,读已提交
- REPEATABLE READ ,可重复读(默认)
- SERIALIZABLE ,串行化
4.2.1 READ UNCOMMITTED 读未提交
定义:事务可以读取其他事务尚未提交的数据变更(即 “脏读”)。
特点:
- 最低隔离级别,并发性能最高,但存在严重的数据不一致风险。
- 可能出现的问题:
- 脏读(Dirty Read):事务 A 读取到事务 B 未提交的数据,若 B 后续回滚,A 读到的数据是无效的。
- 也可能引发不可重复读和幻读。
- 适用场景:几乎不推荐使用,仅在对数据一致性要求极低、追求高并发的场景(如临时统计分析)中偶尔使用。
4.2.2 READ COMMITTED 读已提交
定义:事务只能读取其他事务已提交的数据变更。
特点:
- 避免脏读,但可能存在不可重复读(Non-repeatable Read):事务 A 在两次读取同一数据期间,事务 B 提交了对该数据的修改,导致 A 两次读到的数据不一致。
- MySQL 中默认隔离级别?:
- 非默认,Oracle、SQL Server 默认是此级别,但 MySQL InnoDB 默认是 REPEATABLE READ 可重复读。
- 适用场景:适用于需要避免脏读,但允许不可重复读的场景(如大多数 OLTP 系统)。
4.2.3 REPEATABLE READ 可重复读
定义:事务在执行过程中,多次读取同一数据时,结果始终保持一致,不受其他事务提交操作的影响。
特点:
- 避免脏读和不可重复读,但可能存在幻读(Phantom Read):事务 A 按条件读取数据时,事务 B 插入满足条件的新数据并提交,导致 A 再次按相同条件读取时,结果集新增了数据(“幻觉”)。
- MySQL InnoDB 默认隔离级别:通过 MVCC(多版本并发控制) 和 间隙锁(Gap Lock) 机制,默认情况下可避免幻读(其他数据库如 Oracle 在此级别仍可能存在幻读)。
注意:MVCC并不能解决幻读,它是用来解决不可重复读的,MVCC 仅管理已有数据行的版本,但无法感知 “是否有新行插入到查询条件的范围内”
实现原理:
- 使用快照读(Snapshot Read)获取数据的历史版本,保证同一事务内多次读取结果一致。
- 写操作(如更新、删除)会加锁,防止其他事务修改当前数据。
适用场景:默认推荐级别,适用于需要保证事务内数据一致性(如金融交易、库存管理)的场景。
不可重复读和幻读的区别:
- 不可重复读是 “行内数据的版本变更”,幻读是 “结果集的成员变更”(行的增删)。
- 前者关注数据值的一致性,后者关注数据集合的稳定性。
4.2.4 SERIALIZABLE 串行化
定义:最高隔离级别,事务按串行顺序依次执行,完全串行化执行。
特点:
- 避免所有并发问题(脏读、不可重复读、幻读),但并发性能最低,因为会对所有读取的行加锁,可能导致大量锁竞争和超时。
- 实现方式:通过在读取的行上加排他锁(X Lock),强制事务串行执行。
适用场景:仅在对数据一致性要求极高、并发量极低的场景(如银行转账核心系统)中使用。
4.2.5 对比总结
注:MySQL InnoDB 通过 MVCC + 间隙锁在 REPEATABLE READ 级别下可避免幻读,其他数据库(如 Oracle)在此级别可能仍存在幻读。
总结
本篇文章介绍了MySQL中事务的相关内容,包括事务的特性,如何使用事务,和事务的隔离性以及隔离级别,如果有什么不正确的地方,还望评论区指正,谢谢大家。
相关文章:
MySQL《事务》
文章目录 前言一、什么是事务?二、事务的ACID特性三、如何使用事务?3.1 查看支持事务的存储引擎3.2 语法3.3 开启一个事务,执行修改后回滚3.4 开启一个事务,执行修改后提交3.5 保存点3.6 自动/手动提交事务 四、事务的隔离性和隔离…...
微服务划分的思考
为什么 微服务不是十全十美的,不是银弹,是什么原因导致必须要做微服务划分,是否有足够的动机支撑,是项目需要,还是领导的想法,公司层面是否有相应的规划。 拆分后的服务谁来维护,研发同学是否愿意参与 为什么,思考清楚了,接下来看还需要考虑怎么做 单体应用的不足…...
介绍XML
XML(Extensible Markup Language,可扩展标记语言)是一种用于存储、传输和交换数据的标记语言,由万维网联盟(W3C)在1998年制定。它通过自定义标签描述数据结构,具有平台无关性、自描述性和结构化…...
从0开始配置spark-local模式
安装Spark的过程就是下载和解压的过程。接下来的操作,我们把它上传到集群中的节点,并解压运行。 1.启动虚拟机 2.通过finalshell连接虚拟机,并上传安装文件到 /opt/software下 3.解压spark安装文件到/opt/module下 tar -zxvf spark-3.3.1-…...
CSS基础-即学即用 -- 笔记1
目录 前言CSS 基础1. 层叠样式表来源理解优先级源码顺序经验法则继承inherit 关键字initial 关键字 2. 相对单位em 和 rem响应式面板视口的相对单位使用vw定义字号使用calc()定义字号自定义属性(即CSS变量) 3. 盒模型调整盒模型 前言 只需一分钟就能学会…...
日志文件太大,如何分卷压缩便于传输
在IT系统维护和开发工作中,日志文件的作用举足轻重,它不仅记录了系统运行过程中的详细信息,还能帮助技术人员诊断问题、追踪事件和分析性能。 然而,随着系统的长期运行,日志文件可能会迅速膨胀,特别是在高…...
【Django】设置让局域网内的人访问
操作步骤 1. 命令行窗口下查询【本机ip】 ipconfig2. Django项目的全局设置【settings.py】中进行如下设置 ALLOWED_HOSTS ["本机ip"]3. 启动Django项目:命令行下执行如下命令 python manage.py runserver 0.0.0.0:80004. 测试效果:浏览器…...
智慧教室电子班牌-智能管理系统源码,后端基于Spring Boot框架,前端使用Vue.js框架进行组件化开发
智慧班牌系统是一种集成了多种功能的电子班牌,包括校园信息发布、综合素质评价、考勤管理、家校互通、教务管理、考场管理和成绩分析等。它为班级和学校提供了一个多层次、多内容的信息发布平台,同时也为教师、家长和学生提供了一个安全、快捷、全面的互…...
[密码学实战]密评考试训练系统v1.0程序及密评参考题库(获取路径在文末)
[密码学实战]密评考试训练系统v1.0程序及密评参考题库 引言:密评考试的重要性与挑战 商用密码应用安全性评估(简称"密评") 作为我国密码领域的重要认证体系,已成为信息安全从业者的必备技能。根据国家密码管理局最新数据,截至2024年6月,全国仅有3000余人持有…...
Vue如何获取Dom
在Vue中获取DOM元素可以通过几种方法:1、使用模板引用(ref),2、使用事件绑定,3、使用生命周期钩子。这些方法各有优缺点,适用于不同的场景。本文将详细介绍这些方法的使用方式及其适用场景,帮助…...
AI大模型 —— 国产大模型 —— 华为大模型
有这么一句话,那就是AI大模型分两种,一种是大模型;另一种是华为大模型。 如果从技术角度来分析,华为的技术不论是在软件还是硬件都比国外的大公司差距极大,甚至有些技术评论者认为华为的软硬件技术至少落后2.5代&#…...
LX4-数据手册相关
数据手册相关 一 如何获取数据手册 ST官网:www.st.com 中文社区网: https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘宝的商品详情页 二 如何阅读数据手册 芯片手册 定义:由芯片制造商提供,详细…...
华为VRP系统知识总结及案例试题
目录 🧠 华为VRP系统 优化整合笔记(完整版)一、VRP系统概述📌 什么是VRP(Versatile Routing Platform)?🚀 VRP系统发展历程 二、设备文件系统与存储结构📂 常见文件类型&…...
深度解析云计算:概念、优势与分类全览
以下是对云计算概念、优点和分类更详细的介绍: 一、云计算的概念 云计算是一种通过互联网提供计算服务的模式,它基于虚拟化、分布式计算、网络存储等一系列先进技术,将计算资源进行整合和管理,形成一个庞大的资源池。这些资源包…...
剑指offer经典题目(五)
目录 栈相关 二叉树相关 栈相关 题目一:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。OJ地址 图示如下。 主要思想:我们…...
Coze平台 创建AI智能体的详细步骤指南
一、创建智能体的基础流程 注册与登录 访问Coze官网(www.coze.cn),使用邮箱或手机号注册账号并登录。 创建智能体 在控制台点击左侧“”按钮,选择“创建智能体”,输入名称(如“职场鼓励师”&…...
电商数据自动化采集方案:淘宝商品详情 API 接入与数据处理技巧
在电商行业高速发展的今天,数据已成为企业决策和竞争的核心要素。通过自动化采集淘宝商品详情数据,企业能够实时掌握市场动态、优化商品策略、提升用户体验。本文将详细介绍基于淘宝商品详情 API 的自动化采集方案,涵盖 API 接入流程、数据采…...
高并发内存池项目
高并发内存池项目 一、项目介绍二、什么是内存池2.1池化技术2.2内存池2.3内存池主要解决的问题2.3.1外部碎片2.3.2内部碎片 2.4malloc的了解 三、定长内存池的实现3.1 通过类型模板参数表示定长内存池3.2定长内存池的实现原理 四、高并发内存池的框架设计4.1ThreadCache的实现4…...
你学会了些什么211201?--http基础知识
概念 HTTP–Hyper Text Transfer Protocol,超文本传输协议;是一种建立在TCP上的无状态连接(短连接)。 整个基本的工作流程是:客户端发送一个HTTP请求(Request ),这个请求说明了客户端…...
储能集装箱电池簇安装支架结构设计(大纲)
储能集装箱电池簇安装支架结构设计 第一章 绪论 1.1 研究背景与意义 储能技术在能源转型中的战略地位电池簇在储能系统中的核心作用支架结构对电池安全稳定运行的重要性研究电池簇安装支架的工程价值与应用前景 1.2 国内外研究现状 国际先进储能集装箱支架设计技术概述国内…...
解决Chrome浏览器访问https提示“您的连接不是私密连接”的问题
如何绕过Chrome的“您的连接不是私密连接”证书警告页面 在使用Chrome浏览器访问一些自签名或测试用的HTTPS网站时,常常会遇到这样一个拦截页面: “您的连接不是私密连接” 虽然这是Chrome出于安全考虑的设计,但对于开发者或测试人员来说&am…...
前端笔记-AJAX
什么是AJAX? AJAX(Asynchronous JavaScript and XML)就是异步的JS和XML, 是一种无需刷新页面即可与服务器交换数据并更新部分网页内容的技术。它的核心是通过 JavaScript 在后台发送 HTTP 请求,接收服务器返回的…...
单片机可以用来做机器人吗?
不少同学心里都有个疑问:学了单片机到底能不能用来制作机器人呢?答案是毋庸置疑的,能!但具体该如何操作,又得掌握哪些知识呢?今天,咱们就用通俗易懂的话语,详细地为大家一步步剖析清楚。 一、单片机 —— 机器人的 “智慧大脑” 单片机就如同机器人的大脑一般,通过编…...
VS Code + GitHub:高效开发工作流指南
目录 一、安装 & 基本配置 1.下载 VS Code 2.安装推荐插件(打开侧边栏 Extensions) 3.设置中文界面(可选) 二、使用 VS Code 操作 Git/GitHub 1.基本 Git 操作(不输命令行!) 2.连接 GitHub(第一次使用) 三、克隆远程仓库到 VS Code 方法一(推荐): 方…...
Linux系统编程 day7、8 信号(周日划水了)
信号相关概念 信号这章难就难在其抽象。 信号共性:简单、不能携带大量数据、满足条件才发送。 信号的特质:信号是软件层面上的“中断”,一旦信号产生,无论程序执行到什么位置,必须立即停止,处理信号&…...
.NET WPF 三维模型
文章目录 .NET WPF 三维模型1 Viewport3D1.1 3D 坐标系1.2 核心组件1.2.1 相机 (Camera)1.2.2 光源 (Light)1.2.3 3D 模型(Model3D) 1.3 模型纹理(Material)1.4 完整示例:创建坐标轴与立方体1.5 转换模型1.6 性能1.6.1…...
iOS 中的虚拟内存 (理解为什么需要虚拟内存)
什么叫“虚拟地址空间”? 一句话:它是 CPU 看得见、App 以为自己独享,但实际上会被内核和硬件(MMU)动态翻译到真实 物理内存 的一整块“虚拟地图”。 1. 背景:为什么要“虚拟”? 需求虚拟地址空…...
算法之动态规划
动态规划 动态规划1. 核心思想2. 基本步骤3. 关键概念3.1 基本概念3.2 优化技巧 4. 常见应用场景5. 典型案例5.1 斐波那契数列5.2 背包问题5.2.1 0-1背包问题5.2.2 完全背包问题 5.3 最短路径——Floyd算法5.4 最长公共子序列(LCS)5.5 最长递增子序列&am…...
leetcode0130. 被围绕的区域- medium
1 题目:被围绕的区域 官方标定难度:中 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ 组成,捕获 所有 被围绕的区域: 连接:一个单元格与水平或垂直方向上相邻的单元格连接。 区域:…...
衡石科技ChatBI--飞书数据问答机器人配置详解(附具体操作路径和截图)
先决条件 需要在衡石系统认证方式中配置好飞书认证方式,具体步骤详见认证方式中关于飞书的部分。先完成这部分配置后,再进行以下步骤。 飞书中创建机器人应用 1. 创建飞书应用 在飞书企业自建应用管理中创建应用,设置logoÿ…...
25.解决中医知识问答删除历史对话功能后端处理请求时抛出异常
ChatTest.vue:176 DELETE http://localhost:8080/api/chat/conversations/20 500 (Internal Server Error) deleteConversation ChatTest.vue:176 onClick ChatTest.vue:22 ChatTest.vue:185 删除失败 AxiosError {message: Request failed with status code 500, name: Axio…...
【解决方法】关于解决QGC地面站4.4.3中文BUG,无法标注航点的问题
GC以中文启动时无法标记航点,只有在英文状态下启动然后转换为中文才能标记航点。这个BUG源于中文翻译脚本里面以中文逗号作为多个选项的分隔符,导致编译器认为这个只是一个整体。所以翻译时数量不匹配,导致BUG。 解决方法:将所有…...
Flowith AI,解锁下一代「知识交易市场」
前言 最近几周自媒体号都在疯狂推Manus,看了几篇测评后,突然在某个时间节点,在特工的文章下,发现了很小众的Flowith。 被这段评论给心动到,于是先去注册了下账号。一翻探索过后,发现比我想象中要有趣的多&…...
【AI实战】基于DeepSeek构建个性化AI对话代理:从提示词工程到完整实现
作为开发者,我们经常需要与AI进行各种交互。本文将详细介绍如何通过提示词工程(prompt engineering)构建个性化的AI对话代理,并使用DeepSeek的API实现完整解决方案。 一、个性化AI代理的核心要素 1.1 角色设定(Role Setting) 角色设定是构建个性化AI的…...
基于ueditor编辑器的功能开发之重写ueditor的查找和替换功能,支持滚动定位
百度编辑器的查找和替换无法随着页面滚动定位,找到searchreplace.js,重写里面的方法 效果展示: 20250421173735 思路: 找到查找和替换的输入框,发现id名分别为findtxt和findtxt1,分别绑定change事件&…...
分布式数据库TiDB:架构、核心特性与生产实践(分库分表)
在云计算与大数据时代,传统单机数据库面临三大挑战:海量数据存储、高并发访问和实时分析需求。MySQL分库分表方案复杂、NoSQL缺乏ACID支持、MPP数仓难以处理OLTP... 在这样的背景下,TiDB应运而生。作为一款开源的分布式NewSQL数据库ÿ…...
用自然语言指令构建机器学习可视化编程流程:InstructPipe 的创新探索
想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其…...
利用WSL2的镜像功能访问Windows下的所有网卡
目录 引言 镜像功能 如何设置 自动代理 结语 引言 我通常用PC上的LAN口去连接开发板,但是在WSL2中要访问LAN口连接的开发板有点麻烦。WSL2默认的网络模式为NAT,如果要访问Windows中网口需要设置桥接,比较繁琐。今天尝试了一下Windows 1…...
AI助理iOS开发:Copilot for Xcode 下载与安装全指南
引言 借助 Copilot for Xcode 也有两年了,如今已经变成了日常开发中的“默契搭档”。它能根据上下文补全代码,快速生成常用逻辑,甚至有时候在我还在思考怎么写的时候,它就已经给出了不错的建议。特别是在写一些重复性较高的代码&…...
Hadoop+Spark 笔记 2025/4/21
定义 1. 大数据(Big Data) - 指传统数据处理工具难以处理的海量、高速、多样的数据集合,通常具备3V特性(Volume体量大、Velocity速度快、Variety多样性)。扩展后还包括Veracity(真实性)和Va…...
模拟车辆变道 python 可视化
目录 车头朝向一起变化 车头朝向不变化,矩形框 车头朝向一起变化 import cv2 import numpy as npdef world_to_pixel(world_x, world_y, img_w=800, img_h=800):scale_x = img_w / 120 # 横向范围:0~120米scale_y = img_h / 80 # 纵向范围:0~80米pixel_x = int(world_x …...
国产仪器进化论:“鲁般号”基于无人机的天线测试系统
2025年4月14日,成都玖锦科技有限公司正式发布了新品:“鲁般号会飞的系统”系列,这是玖锦科技首款基于无人机的天线方向图测试系统。 在“振兴民族产业,打造民族品牌”的征途中,“鲁般号”系列是继“墨子”、“孔明”、…...
Linux学习笔记协议篇(六):SPI FLASH设备驱动
目录 一、设备树解析 二、SPI设备驱动代码分析 1、spi_nor_probe 2、spi_nor_scan (1)协议配置 (2)初始化Flash参数(核心步骤) (3)MTD子系统集成 (3)配置 SPI 通信参数 spi…...
Spring Boot 核心模块全解析:12 个模块详解及作用说明
在当今的微服务与云原生时代,Spring Boot 已成为构建现代 Java 应用的事实标准。它通过“约定优于配置”的理念,大大降低了 Spring 应用的开发门槛,帮助开发者快速启动和部署独立的、生产级别的项目。 本篇文章将系统梳理 Spring Boot 框架中…...
【无人机】无人机方向的设置,PX4飞控方向,QGC中设置飞控的方向/旋转角度。PX4使用手册飞行控制器/传感器方向
目录 #1、基本概念:计算方向 #2、详细步骤:设置方向 #3、微调 默认情况下,飞行控制器(和外部指南针,如果有)应放置在框架顶部朝上,方向应使箭头指向飞机前部。 如果板或外部指南针安装在任何…...
【Spring Boot基础】MyBatis的基础操作:日志、增删查改、列名和属性名匹配 -- 注解实现
MyBatis的基础操作 1.打印日志2. 参数传递2.1不传参2.2 固定参数 3. 增(Insert)3.1 用对象接参3.2 用param注解接收参数3.3 返回主键 4. 删(Delete)4.1 用Integer接参4.2 用对象接参 5. 改(Update)6. 查(Select)6.1 查6.2 拼接SQL语句6.3 列名和属性名匹配6.3.1 起别名 as6.3.2…...
泰迪智能科技大模型应用平台功能特色优势
1.平台概述 大模型应用平台是一款专为高校在大模型应用场景下的教学和科研需求设计的知识库问答系统。平台具备便捷性,支持上传常见格式的数据文件,如txt、doc、pdf、md等,并提供简洁明了的操作配置界面,使用户能够轻松搭建和训练…...
【NLP 69、KG - BERT】
人们总是在无能为力的时候喜欢说顺其自然 —— 25.4.21 一、KG-BERT:基于BERT的知识图谱补全模型 1.模型结构与设计 Ⅰ、核心思想: 将知识图谱中的三元组(头实体-关系-尾实体)转化为文本序列,利用BERT的上下文理解能…...
Spring解决循环依赖
Spring 通过 三级缓存机制 解决循环依赖问题,其核心思想是 提前暴露未完全初始化的 Bean,允许依赖方在 Bean 完全初始化前引用其早期版本。以下是详细解析: 一、三级缓存机制 Spring 在单例 Bean 的创建过程中维护了三级缓存,用于…...
深入解析 Spring 中的 @Value 注解(含源码级剖析 + 自定义实现)
深入解析 Spring 中的 Value 注解(含源码级剖析 自定义实现) 在 Spring 开发中,我们经常使用 Value 注解将配置文件中的值注入到 Bean 的属性中。本文将深入探讨 Value 的使用方式、默认值支持、底层原理以及自定义实现方式。 一、Value 的…...