MySQL基础之如何使用长事务及其避险


前言

何为事务不在本文讨论范围
下面介绍事务的隔离级别及长事务


提示:以下是本篇文章正文内容,下面案例可供参考

一、标准的事务隔离级别

  1. 读未提交: 事务尚未提交时,它所做的改动就能被其它事务看到
  2. 读已提交: 事务必须被提交之后它所做的改动才能其它事务看到
  3. 可重复读: 事务执行过程中使用的数据总与该事务开启时看到的数据保持一致
  4. 串行化: 事务排好队,one by one地执行,上一个事务未执行完毕时, 对所涉及的数据会加锁,执行完毕后下一个事务才能使用这些数据

在实现时,MySQL是通过创建视图(副本), 事务执行期间以保存的视图中的数据为准

二、事务隔离的实现

隔离的实现其实使用的是比较笨的方法: 保存每一次修改的记录,将其记录到回滚日志中; 这种方式类似于git的工作方式,可以回归到保存的任意版本

在没有事务需要用到回滚日志的时候,MySQL会自动将其删除

三、长事务的使用及其避险

首先我们得先明确何为长事务 : 所谓长事务,即运行时间长且长时间未提交的事务;
第二点正是不建议使用长事务的原因, 长事务会在系统中存放大量的视图,这些视图中的一部分可能是很早之前的版本了.这将会导致内存被大量占用
鉴于此, 我们通常将事务设置为自动提交,避免产生大量的视图


猜你喜欢

转载自blog.csdn.net/qq_45596525/article/details/114435269