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;

  • 相关阅读:
    TOMCAT源码分析(转)
    CSS从零开始(1)--CSS基础语法
    java生成验证码
    [转]java中作用域public private protected 以及不写的区别
    Java Socket NIO详解(转)
    mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
    手机验证码执行流程
    javaweb之Filter过滤器详解
    HttpSessionListener的用法
    SpringContextHolder 静态持有SpringContext的引用
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/11005635.html
Copyright © 2011-2022 走看看