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模型的事务。
  • 行级锁,提高并发访问性能。
  • 支持外键约束。
相关推荐
染指11102 分钟前
140.Agent-多Agent框架-Agent执行Skills流程
数据库·人工智能·设计模式·langchain·agents
niucloud-admin4 分钟前
JAVA V6 多商户商城 开发文档——JAVA服务端
java·开发语言
fengkai45457 分钟前
十二、Redis -2
运维·数据库·redis·容器
alexlifexyz18 分钟前
写了个 Claude Code 插件:AI 写的 Java 违反阿里规约,就写不进文件
java
威哥爱编程31 分钟前
【AI全栈12-01】Spring Boot 为何是 AI 全栈后端优选
java·spring boot·后端
威哥爱编程33 分钟前
【AI全栈12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·spring boot·后端
威哥爱编程33 分钟前
【AI全栈12-02】Spring Boot 跑通第一个 AI 对话接口:HR 政策问答机器人实战
java·spring boot·后端
Wang's Blog35 分钟前
Java 中间件之 RabbitMQ 快速入门: 异步通讯的优缺点
java·中间件·java-rabbitmq
用户0942485680336 分钟前
第31章:JVM字节码解释器与模板解释器源码路径
java·jvm