mysql事务隔离级别及实现原理

db 专栏收录该内容
2 篇文章 0 订阅

mysql事务

       Markdown编辑器用的不顺手,自己选的,跪着也要用完。
       事务通俗的来讲就是SQL要么全部执行成功,要么全部执行失败回滚到执行前的状态。不存在部分执行成功,部分执行失败的情况。

事务特性

       事务通常需要满足四个特性,也就是事务的ACID特性。对于Oracle数据库来说,其默认的事务隔离级别是READ COMMITTED;对于InnoDB存储引擎,其默认的事务隔离级别为REPEATABLE READ。

  1. 原子性(atomicity)。原子性是指整个数据库事务是个不可分割的工作单位。只有事务中的数据库所有操作操作都执行成功,才算整个事务成功。
  2. 一致性(consistency)。一致性是指事务讲数据库从一种状态转变为另一种一致的转态。
  3. 隔离性(isolation)。隔离性也叫并发控制、可串行化、锁等。事务的隔离性要求每个读写事务的对象对其他事务的操作对象能相互分离。
  4. 持久性(durability)。事务提交后,其结果将会保存到硬件上。

事务的隔离级别

事务的隔离级别有

  1. read uncommitted
  2. read committed
  3. repeatable read
  4. serializable

read uncommitted

事务1读到了事务2未提交的数据,出现了脏读
事务1读到了事务2未提交的数据,出现了脏读

read committed

事务2增加或者修改了数据,事务1前后两次读取到的数据不一样(不满足事务的一致性)。
在这里插入图片描述

repeatable read

1核1G服务器,开启2个事务,我以很快的速度提交事务,一直提示

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

这个问题。后来查询了下,发现是因为有事务没有提交,使用

select * from information_schema.innodb_trx \G

来查看事务提交情况,使用kill trx_mysql_thread_id就可以了。在这里插入图片描述
repeatable read 会出现幻读,比如我事务1修改了特定或者全部数据,我事务2新增加了一个1条记录。事务2提交后,事务1也提交,再查询,发现有条数据没有被更新成为指定值。
repeatable read

serializable

事务最高隔离级别,事务是一个一个执行的,测试的时候发现,更新操作需要等待另外一个事务commit后才能执行成功。
在这里插入图片描述

事务实现原理

   阿里面试事务原理

  • 事务实现原理
  • redo 和undo
  • 日志查看

小记

2、本文参考了 MySQL技术内幕-InnoDB存储引擎 书籍,该书指粗略的看了下,不是太明白,有机会大家多交流交流。
2、Markdown还是用的不是很熟练。和写论文的LaTeX一样,用起来不顺手QAQ。

在这里插入图片描述

  • 1
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

naxieren1992

肚子好饿,早知道不学java了

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值