MySQL事务隔离

  • 事务隔离
    • MySQL是支持多引擎的系统,不是所有引擎都支持事务,比如MyISAM就不支持,这也是MyISAM被取代的原因之一
    • 事务的ACID特性
      • 原子性
      • 一致性
      • 隔离性
        • 对于隔离性来说,隔离性越好效率越差
      • 持久性
    • 事务的标准隔离级别
      • 读未提交
        • 一个事务未提交,所做的变更能被别的事务看到
      • 读已提交
        • 一个事务提交之后,所做的变更才能被其它事务看到
      • 可重复读
        • 一个事务执行过程中,所读的数据总是跟这个事务在启动时看到的数据是一致的
      • 串行化
        • 对同一行记录,写会加写锁,读会加读锁,当出现读写锁冲突时,后访问的事务必须等前一个事务执行完毕
        • 如何设置事务级别?
          • 设置启动参数transaction-isolation
      • 每个隔离级别都有适用的场景
        • 比如可重复读,银行在校对差额时,将本月余额与账单明细进行校对,此时如果发生一笔新的交易则不受影响
    • 事务隔离的实现
      • MySQL在每条记录更新时会同时记录一条回滚操作,通过回滚操作可以得到前一个状态的值,比如值1经过2 3 4 的顺序修改,那么回滚日志有对应的三条修改记录(read—view),在查询该记录时,不同时刻启动的的事务有不同的read—view,同一条记录在系统中可以存在不同的版本号,这就是数据库的多版本并发控制(MVCC)
        • 回滚日志会在事务不需要的时候删除,即系统没有比当前回滚日志更早的read-view
        • 为什么不建议使用长事务,长事务会保存很老的事务视图,事务提交之间回滚记录都需要保留,由于其它事务可能访问数据库里的任何数据,另一个影响是,长事务会占用锁资源,可能会拖垮整个数据库
        • 事务启动方式
          • 显示启动
          • set autocommit 关闭自动提交(长事务)
          • tip:通过显示语句启动事务并自动提交,set autocommit=1
        • 长事务查询,表information_schema 用于查询持续时间超过60s的事务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_40396568

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值