zoukankan      html  css  js  c++  java
  • Mysql事务隔离级别

    一、事务指的是什么?

    事务可以看作一个业务逻辑处理单元,这个单元要么执行,要么不执行。

    二、ACID的原则

      (1)、原子性(Automicity)

      (2)、一致性(Consistency)

      (3)、隔离性(Isolation)

      (4)、持久性(Durability)

    三、mysql事务隔离级别

    3.1 读未提交

    事务A对数据库做的没有提交的操作事务B也能读取,读到的是脏数据。脏数据理解

    3.2 读已提交

    事务B只能读取事务A已经commit的操作,在事务A没提交前事务B看不到A所做的更改。该级别不支持可重复读,大多数数据库默认该级别。

    不可重复读:在事务A没提交前事务B看不到A所做的更改,在事务A提交后事务B能看到A所做的更改,因为事务A更改了数据导致事务B两次查看的内容前后不一致,这就是不可重复读。

    3.3 可重复读

    不管事务A对数据做什么操作并提交(比如增删改),事务B重复地查看该数据都和它第一次的查看结果一样。该级别可能产生幻读,mysql默认为该级别。

    幻读:

    有空表table_student(id,name ),id为主键;

    事务A和事务B同时查看表内容,都发现为空;

    首先事务A向table_student插入一行id为1的数据并提交,然后事务B查看表内容,发现为空(和它第一次的查看结果一样)

    再然后事务B向table_student插入一行id为1的数据,问题来了,插入失败,报错:主键冲突。可是事务B插入前查看表内容明明为空啊,见鬼!!

    那就再查看一次内容吧,事务B再次查看表内容,还是空的啊(可重复读,在事务中第一次查询为空,以后次次都是空,重复查询的结果相同)!!!可插入却报主键冲突,就是插入不进,之前的读取就是幻读。B只有提交后才能看到A插入的数据。

    不可重复读侧重表达 读-读,幻读则是说 读-写,用写来证实读的是鬼影。

    3.4 串读

    事务A对table_student进行操作,比如读写操作,但不提交,此时事务B也想向table_student进行操作,发现所在会话陷入等待,如果A一直未提交,则B可能会等待超时。这是最严格的级别。

    这就最高级别的隔离机制,它通过强制事务排序,使其步能相互冲突,从而解决了幻读问题。
    简单的说:它是在每个读数据行加上了一个共享锁,在这个级别,可能导致大量的超时现象和锁竞争.

  • 相关阅读:
    JQuery框架中使用blockUI制作自定义的漂亮的网页提示框
    PHP树形菜单一次展开一个子项目,可以记录打开的项目,刷新后不变
    第一次面试
    东软的校园招聘笔试
    fscommand
    从 ActionScript 中调用外部代码
    GCC 参数详解
    flash build找不到调试版plashplayer的解决办法
    C# winform与 flash as 的交互通讯
    LLVM 与 Clang 介绍
  • 原文地址:https://www.cnblogs.com/xiami-xm/p/5761431.html
Copyright © 2011-2022 走看看