zoukankan      html  css  js  c++  java
  • MySQL中的事务隔离

      提到MySQL中的事务就会想到四个字母ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天主要来说的是事物隔离。

    1.事物隔离级别

      Sql标准的事物隔离级别有四种:读未提交、读提交、可重复读、串行化。

      读未提交:事物A还没提交,但是事物A所做的改变对事物B可见。

      读提交: 事物A所做的改变只有在A提交后才对其他事物可见。

      可重复读: 事物A在执行过程中看到的数据,与事物A在启动时看到的数据保持一致。

      串行化:利用锁来实现排队,效率低。

    2.事物隔离的实现

      以“可重复读”隔离级别来说,MySQL中的事物隔离是靠回滚日志记录每一次更新的回滚操作来实现的。

      数据库中应避免长事物,因为长事物会占用大量存储空间(大量回滚日志的原因),同时也会占用锁资源。

    3.事物的开启方式

      数据库中事物的开启一般使用begin transaction 或者start transaction 开始,以commit 提交结束或者rollback回滚。

      业务开发中,强烈建议将mysql的事物提交方式设置为自动提交,即 set autocommit = 1, 然后通过显示语句(start transaction)来开启事物。

      若设置 set autocommit = 0则关掉自动提交,如果执行一个select 语句则事物开启,直到你手动提交事物一个事物才结束,这样容易造成长事物。

      为了避免在自动提交事物模式下需要每次显示开启事物,可以在提交语句时用commit work and chain语法,这样自动开启下一个事物。

    4.检查长事物的方法

      select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(), trx_started)) > 60;

  • 相关阅读:
    MyBatis基础面试题
    MyBatis面试题
    Spring MVC @RequestBody自动转JSON HTTP415错误解决方法
    【GDKOI 2016】地图 map 类插头DP
    【Codechef FRBSUM】【FJOI2016】【BZOJ4299】【BZOJ 4408】 可持久化线段树
    【NOI2005】聪聪和可可 概率与期望 记忆化搜索
    【bzoj 1076】【SCOI2008】奖励关
    BZOJ 1009 HNOI 2008 GT考试 递推+矩乘
    BZOJ 3809 Gty的二逼妹子序列
    BZOJ 2821作诗(Poetize) 分块
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/11005635.html
Copyright © 2011-2022 走看看