mysql基础(十)存储引擎与事务 文章目录1. 存储引擎2. 事务1. 存储引擎存储引擎是MySQL中独有的称谓用来区分不同的存储与组织数据方式也就是不同的存储引擎存储数据方式不同。查看表使用的引擎SHOWCREATETABLEa1常用的就是InnoDB和MyISAM。在 MySQL 5.7 及之前的版本中MyISAM 使用三个文件表示一张表mytable.frm存储表结构的定义、mytable.MYD存储表行的内容、mytable.MYI存储表上的索引。在 MySQL 8.0 中.frm 文件已被移除改用数据字典Data Dictionary 统一管理表结构定义因此你只能在物理目录下看到 .MYD 和 .MYI 两个文件。其优势就是可转换为压缩、只读表来节省空间劣势是不支持事务所以不安全。InnoDB是默认的引擎也是一个重量级引擎以一个.frm文件表示使用表空间(tablespace)存储表的内容并提供一组用来记录事务性活动的日志文件用commit、savepoint、rollback来支持事物处理支持行级锁定支持服务器崩溃后自动恢复。其最大优势就是安全对事务的支持相对劣势就是无法很好的节约存储空间。还有MEMORY引擎因为其数据存储在内存中查询效率最高但是不安全这里不做赘述。2. 事务事务特性1.原子性——事务是一个不可分割的最小工作单元。事务中的所有操作要么全部执行成功要么全部失败回滚不会结束在中间某个环节。2.一致性——事务的执行必须使数据库从一个一致性状态变换到另一个一致性状态。这意味着事务执行前后数据必须满足所有的约束条件如主键、外键、唯一性等和业务规则数据整体保持完整和逻辑正确。3.隔离性——多个事务并发执行时一个事务的执行不应被其他事务干扰。InnoDB通过提供事务隔离级别如读未提交、读已提交、可重复读、串行化来控制一个事务在提交前其修改对其他事务的可见程度。4.持久性——事务一旦提交其对数据库中数据的修改就是永久性的。即使数据库系统随后发生故障已提交的数据也不会丢失。MySQL默认自动提交事务。关闭自动提交命令SETautocommit0;关闭自动提交后直接操作是无效的要用加上COMMIT才能提交成功。开启自动提交用BEGIN开启事务事务的隔离性至关重要如同在事务之间建了一道墙可厚可薄墙越厚隔离级别越高。下表是从低到高的隔离级别表读未提交——事务A读到了事务B未提交的数据这会导致脏读问题。做为最低隔离级别读未提交一般只是理论上存在因为大多数据最低级别都是从读已提交开始。读已提交——事务A只能读取到B已提交的数据虽然解决了脏读问题但是存在不可重复读问题也就是因为B事务提交了更改数据导致A事务前后读取结果不一致。其实这种情况获得的数据是真实的相当于实时更新了只是在某些场景不允许出现这种问题。可重复读——在B事务修改且提交的情况下事务A每次查询结果都一样解决了不可重复读问题。然而这种隔离级别还是会面临幻读问题即在B事务新增数据并提交后事务A读取到的数据条数发了变化就像出现幻觉一样。串行化/序列化——事务A执行的时候事务B要排队不能并发执行解决了上述所有问题。隔离级别演示读未提交演示读已提交演示可重复读演示串行化演示关于串行化的总结1.所有事务都只进行查询是不会出现阻塞的。2.事务A有了任何操作(包括查询)并未提交事务B的DML会被阻塞。3.事务A有了DML操作并未提交事务B的任何操作(含查询)会被阻塞。4.事务A有了DML操作并未提交事务B已经提交过了那么事务B的查询不会阻塞这是对第3条的补充。总结脏读读取了其它事务未提交数据不可重复读读取了其它事务已提交的修改数据幻读读取了其它事务已提交的新增数据。

相关新闻

最新新闻

嵌入式启动流程与OTA升级实战:从MCU到SoC的故障定位与容错设计

嵌入式启动流程与OTA升级实战:从MCU到SoC的故障定位与容错设计

做嵌入式固件这行,最怕的不是需求改版,而是设备上电之后毫无反应、升级升到一半变砖、极端环境下一觉醒来发现远程设备集体失联。最近我把这几年做启动流程、故障定位和OTA升级的工程经验整理成付费专栏连载,本篇是衔接上篇思考题的一期&…

2026/9/8 14:55:13
FPGA 100G光口测试实战:从硬件架构到误码率验收

FPGA 100G光口测试实战:从硬件架构到误码率验收

100G光口测试这件事,放在几年前还是数通大厂验证团队的专属领域,但这两年随着数据中心和AI集群的爆发,FPGA工程师碰100G光模块的机会越来越多。我接手过的项目里,有做交换机线卡的、有做加速卡的、还有做专用测试仪表的,几乎都绕不开光口这一关。这期就把我在FPGA上做100G光口/…

2026/9/8 14:55:13
RK3588+RK1288双芯架构破解机器人智能巡检三大现场挑战

RK3588+RK1288双芯架构破解机器人智能巡检三大现场挑战

做机器人智能巡检方案,最难的不是算法跑不出效果,而是整套系统丢到工业现场之后还能不能稳定扛住。我上一个项目是变电站轮式巡检机器人,实验室里YOLOv8识别率刷到99%,一到现场就翻车:模型推理太慢导致机器人走走停停、…

2026/9/8 14:55:13
嵌入式开发必知:23个关键寄存器清单与调试实战指南

嵌入式开发必知:23个关键寄存器清单与调试实战指南

干了这么多年嵌入式,我有个特别深的体会:很多莫名其妙的问题,绕到最后都出在寄存器上。要么是某个位没置对,要么是配置顺序不对,要么是读的时候没注意影子寄存器。库函数用久了容易产生一种错觉,觉得底层都…

2026/9/8 14:55:13
嵌入式工程师多年经验总结:学习路线、面试与实战避坑指南

嵌入式工程师多年经验总结:学习路线、面试与实战避坑指南

后台收到过很多私信问我嵌入式怎么学、能不能入行、薪资到底怎么样。以前在职的时候,有些话不太方便讲,毕竟顶着公司工程师的身份,说重了怕被觉得在带节奏,说轻了又等于没说。现在手续已经办完,交接文档也交了&#xf…

2026/9/8 14:55:13
opencode 终端AI编程Agent实战:安装配置、插件生态与排错指南

opencode 终端AI编程Agent实战:安装配置、插件生态与排错指南

最近在技术圈里,"opencode"这个名字出现的频率越来越高。不管是推特时间线、Hacker News 首页,还是你加的开发者群里,都有人在讨论这个开源的 AI 编程终端 Agent,而且讨论的角度五花八门:有人问安装报错&…

2026/9/8 14:50:13