mysql中InnoDB存储引擎的事务支持与ACID特性
发布时间 - 2026-01-11 00:00:00 点击率:次InnoDB默认支持事务且无需额外开启,ACID通过undo log(原子性)、redo log(持久性)、MVCC(隔离性)和锁机制(一致性)协同实现,建表时需确认引擎确为InnoDB。
InnoDB 默认支持事务,无需额外开启
MySQL 5.5 及以后版本中,InnoDB 是默认存储引擎,且**事务支持是内置开启的**。只要建表时没显式指定 ENGINE=MyISAM 等不支持事务的引擎,就自动具备事务能力。不需要手动执行 SET AUTOCOMMIT=1 或调用 START TRANSACTION 来“启用”事务——它们只是控制事务边界的行为,不是开关。
ACID 中的 A(原子性)靠 undo log 实现
执行 UPDATE、DELETE 或 INSERT 时,InnoDB 会先写入 undo log,再修改数据页。如果事务中途失败或执行 ROLLBACK,就靠 undo log 回滚到之前状态。
-
undo log存在ibdata1或独立表空间里,不是用户直接管理的文件 - 长事务会阻止 undo log 清理,可能引发
Undo tablespace is full报错 -
SELECT不加锁时读的是快照(MVCC),不是最新物理数据,所以不会被未提交事务阻塞
隔离级别影响可见性与锁行为
InnoDB 支持全部四种 SQL 标准隔离级别,但默认是 REPEATABLE READ,这点和 PostgreSQL、SQL Server 不同。它通过 next-key lock(间隙锁 + 行锁)防止幻读,但也因此更容易出现死锁。
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 此后该连接的 SELECT 将看到其他已提交事务的变更 -- UPDATE/DELETE 仍只锁匹配到的行,不锁间隙
-
R:极少用,可能读到未提交的脏数据,InnoDB 不推荐
EAD UNCOMMITTED -
READ COMMITTED:每次SELECT都生成新快照,适合高并发读场景 -
REPEATABLE READ:事务内多次SELECT结果一致,但需注意UPDATE ... WHERE可能锁住更大范围 -
SERIALIZABLE:隐式为所有SELECT加共享锁,基本等于串行执行,性能损耗大
崩溃恢复靠 redo log 保证 D(持久性)
事务提交前,InnoDB 先把变更写入内存中的 redo log buffer,再刷盘到磁盘上的 ib_logfile0 和 ib_logfile1。即使数据库异常宕机,重启时也能根据 redo log 重放未落盘的已提交事务。
-
innodb_flush_log_at_trx_commit = 1(默认):每次COMMIT都强制刷盘,最安全但有 I/O 开销 -
= 0:每秒刷一次,崩溃可能丢一秒事务 -
= 2:写入 OS cache 即返回,不强制 fsync,崩溃可能丢数据(OS 崩溃时) - 不要仅靠
sync_binlog控制持久性,它管的是 binlog,不是 redo log
InnoDB 的 ACID 不是抽象概念,而是由 undo log、redo log、buffer pool、lock system 这几块具体机制协同实现的。最容易被忽略的是:事务是否生效,首先得确认表引擎确实是 InnoDB,而不是因为建表语句漏写引擎、或者被 ALTER TABLE ... ENGINE=MyISAM 意外改掉。
# mysql
# session
# red
# sql
# select
# delete
# 并发
# table
# postgresql
# 数据库
# 的是
# 死锁
# 不需要
# 是由
# 也能
# 更大
# 但也
# 不支持
# 报错
# 四种
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
,南京靠谱的征婚网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
如何用AWS免费套餐快速搭建高效网站?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
新三国志曹操传主线渭水交兵攻略
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何在宝塔面板中修改默认建站目录?
javascript日期怎么处理_如何格式化输出
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel如何发送系统通知?(Notification渠道示例)
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
非常酷的网站设计制作软件,酷培ai教育官方网站?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
制作电商网页,电商供应链怎么做?
如何在企业微信快速生成手机电脑官网?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何快速搭建虚拟主机网站?新手必看指南
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何在建站主机中优化服务器配置?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何快速搭建二级域名独立网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
js代码实现下拉菜单【推荐】
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何在搬瓦工VPS快速搭建网站?
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Python文件异常处理策略_健壮性说明【指导】
Laravel怎么上传文件_Laravel图片上传及存储配置
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Windows Hello人脸识别突然无法使用
WordPress 子目录安装中正确处理脚本路径的完整指南
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何在IIS管理器中快速创建并配置网站?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何用PHP快速搭建CMS系统?


EAD UNCOMMITTED