mysql当前时间减一分钟_MySQL学习笔记事务的隔离性

47419b891006987c7216f0a94bd9c92e.png 关注爱因诗贤 每天进步一点点 导读

最经典的事务相关的例子就是转账,小明向小红转 100 元,小明账户减 100,小红账户加 100,对于这一组操作,必须要保证要么都成功,要么都失败,而 MySQL 的事务具有 ACID 特性,其中隔离性是最难理解的,这篇文章主要来熟悉一下 MySQL 的隔离性,熟悉隔离性可以帮助后面学习多版本并发控制(MVCC)原理。

1.笔记图

29d9f7204c59d13c107d7069e697e4fe.png

2.事务

  • 就是要保证一组数据库操作,要么全部成功,要么全部失败

  • ACIDAtomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

3.隔离级别

  • 串行化(serializable ):对于同一行记录,会加写锁会加读锁

  • 可重复读(repeatable read):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的,未提交变更对其他事务是不可见的

  • 读提交(read committed):一个事务提交之后,它做的变更才会被其他事务看到

  • 读未提交(read uncommitted):一个事务还没提交时,它做的变更就能被别的事务看到3d707d9cf411d8d77e6e32570e11bd88.png

    • 若隔离级别是读未提交V1 的值是 2, V2V3 的值都是 2

    • 若隔离级别是读提交V1 的值是 1V2V3 的值都是 2

    • 若隔离级别是可重复读V1V2 的值都是 1V3 的值是 2

    • 若隔离级别是 串行化,事务 B 执行将 1 改成 2 的时候,会被锁住,直到事务 A 提交后,事务 B 才可以继续执行,V1V2 的值是 1V3 的值是 2

  • 查看当前隔离级别

    show variables like 'transaction_isolation';

4.什么时候会创建视图

  • 可重复读隔离级别下,视图是在事务启动时创建的,整个事务存在期间都用这个视图

  • 读提交隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的

  • 读未提交隔离级别下直接返回记录上的最新值,没有视图概念

  • 串行化隔离级别下直接用加锁的方式来避免并行访问

5.事务隔离的实现

  • 每条记录在更新的时候都会同时记录一条回滚操作

  • 记录上的最新值,通过回滚操作,都可以得到前一个状态的值6acf179f0664d415733ccc4c485e2a9d.png

  • 当前值是 4,不同时刻启动的事务会有不同的 read-view

  • 在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)

  • 当没有事务再需要用到这些回滚日志时,回滚日志会被删除

6.事务的启动方式

  • 显式启动事务语句begin 或 start transaction,配套的提交语句是 commit,回滚语句是 rollback

  • set autocommit=0:该命令会将这个线程的自动提交关掉,如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交

关联文章:MySQL学习笔记-MySQL基础架构 MySQL学习笔记-redo log 和 binlog&两阶段提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值