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模型的事务。
  • 行级锁,提高并发访问性能。
  • 支持外键约束。
相关推荐
隐于花海,等待花开1 分钟前
窗口函数之排序函数详细解读及示例
大数据·数据库·hive
亚空间仓鼠2 分钟前
关系型数据库MySQL(四):读写分离
android·数据库·mysql
Wyz2012102410 分钟前
SQL中如何处理GROUP BY的不可排序问题_ORDERBY与聚合
jvm·数据库·python
Polar__Star16 分钟前
jsoup如何读取html
jvm·数据库·python
devpotato17 分钟前
人工智能(九)- Spring AI MCP客户端开发
java·mcp
亚空间仓鼠18 分钟前
关系型数据库MySQL(三):主从复制
数据库·mysql
a95114164219 分钟前
怎么防范通过phpMyAdmin上传WebShell_禁止into outfile权限
jvm·数据库·python
InfinteJustice21 分钟前
如何统计SQL分组汇总数据_详解GROUP BY与HAVING用法
jvm·数据库·python
zhangchaoxies22 分钟前
如何使用 AWS Lambda 和 Python 获取 EMR 集群的标签列表
jvm·数据库·python
吕源林25 分钟前
如何处理SQL插入后的数据一致性校验_使用Checksum比对
jvm·数据库·python