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模型的事务。
  • 行级锁,提高并发访问性能。
  • 支持外键约束。
相关推荐
寻星探路5 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
陌上丨7 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
曹牧7 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
AI_56787 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw7 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30737 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道8 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
爬山算法8 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7258 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai