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模型的事务。
  • 行级锁,提高并发访问性能。
  • 支持外键约束。
相关推荐
MrSYJ3 分钟前
有没有人懂socketChannel中的write,read方法啊,给我讲讲
java·程序员·netty
Memory_荒年6 分钟前
Spring Security + OAuth2 + JWT:三剑客合璧,打造“无懈可击”的微服务安全防线
java·后端·spring
heimeiyingwang19 分钟前
【架构实战】数据库分库分表实战
数据库·架构
爬山算法28 分钟前
MongoDB(60)如何使用explain命令?
数据库·mongodb
2501_9083298530 分钟前
NumPy入门:高性能科学计算的基础
jvm·数据库·python
瀚高PG实验室33 分钟前
数据库因坏块导致无法VACUUM FREEZE问题处理
数据库·瀚高数据库
杰克尼33 分钟前
知识点总结--02(java基础部分)
java·开发语言·jvm
gechunlian8844 分钟前
Redis简介、常用命令及优化
数据库·redis·缓存
ahauedu1 小时前
MySQL 8.0+ 默认使用 caching_sha2_password 插件进行密码加密
数据库·mysql
CoderIsArt1 小时前
编译器构建中涉及的算法
数据库·算法