MySQL事务、InnoDB存储引擎

目录

一、事务操作

mysql中的事务默认是autocommit,默认每条指令执行完都会自动提交,无法自动将指令集合作为封装为事物,因此需要手动封装事务。

  • 开启事务begin
  • 提交事务commit
  • 回滚事务rollback

二、事务四大特性

事务是一组操作的集合。

  • 原子性要求事务要么全部成功要么全部失败,属于线程内某一操作失败必须回滚。
  • 隔离性要求同一事务在多线程下串行执行无并发安全问题,属于线程之间对该事物的操作不能相互干扰。
  • 一致性要求事务完成后数据保持一致。
  • 持久性要求事务操作后数据是永久修改的。

三、并发事务问题

并发事务指的是不同事物并发操作同一数据 引起的问题。(隔离性保证的是同一事物在多线程下串行执行,能保证事务的并发安全问题,但无法保证数据的并发安全问题)

  • 脏读 :一个事物读取到另外一个事物还没有提交的数据。例如:事务A执行update,但在commit前事务B就读取了数据,那么事务B读到的就是脏数据。
  • 不可重复读 :一个事物先后查询 同一条记录,由于另一个事务的更新 操作导致两次读到不同的数据。例如:事务A先后读取同一数据,但是在两次读取之间事务B修改了数据,导致事务A两次读到的数据不一致。
  • 幻读 :一个事物先后查询 同一条记录,由于另一个事务的插入 操作导致两次读到不同的数据。

四、事务隔离级别

MySQL的事务隔离级别就是解决不同事物之间并发操作同一事物引起的并发事务问题。

在InnoDB引擎中解决方案是对记录加行锁 ,当某一事物对某行记录执行update前会对该行加锁,其余事务无法访问该行数据,直到事务提交后解锁,解决了脏读和

查看事务隔离级别:select @@transaction_isolation;

修改事务隔离级别:set session transaction isolation level 隔离级别;

五、MySQL服务器结构

  • 连接层 用于校验JDBC发来的用户名和密码,确认客户端使用的用户名的权限。
  • 服务层 暴露统一接口检查并处理SQL、存储过程、视图、触发器,生成引擎能理解的指令序列。
  • 引擎层 控制数据的逻辑存储结构,接收服务层的指令序列并执行,从而操作存储层数据,索引、事务、锁在该层维护。
  • 存储层就是磁盘,物理存储结构,存储数据和日志等持久化数据。

六、InnoDB存储引擎

服务层对外暴露统一接口,将sql、存储过程、视图、触发器解析为引擎能理解的指令序列,引擎层负责维护表中数据的逻辑存储结构,不同的引擎有不同的逻辑存储结构,所以引擎层基于自己的存储方式执行传来的指令序列并从磁盘读取数据 ,且过程中可能会涉及的锁、事务、索引都由引擎层自己实现。

存储引擎是基于表的,每张表可以设置不同的存储引擎。


innoDB引擎特点:

  • 每张表都会对应一个.ibd文件,存储了表结构、数据、索引。
  • DML操作支持ACID模型的事务。
  • 行级锁,提高并发访问性能。
  • 支持外键约束。
相关推荐
李少兄几秒前
数据库批量清理前置防御:如何严谨校验目标表是否存在
mysql
shehuiyuelaiyuehao1 分钟前
算法50,分治归并,数组中的逆序对
java·算法
烽学长2 分钟前
(附源码)基于Springboot+vue的图书阅读分享系统的设计与实现
java·spring boot·后端
香吧香3 分钟前
Docker Swarm 线上环境 MariaDB XA 悬停事务故障排查
mysql·异常
Ivanqhz8 分钟前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习
其实防守也摸鱼15 分钟前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github
青山木20 分钟前
RocketMQ 入门到原理(三):消息存储原理
java·后端·中间件·架构·rocketmq
MayBaymax20 分钟前
Spring AI Alibaba Graph 实战:客服工单智能处理
java·ai·ai编程
小白男神25 分钟前
MySQL进阶学习三(视图)
后端·mysql
光依旧1 小时前
MCP实战手记系列(五):让工具返回一个能点的界面(文末附github源码链接)
java·spring ai·前端集成·mcp·mcp apps