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

    1、修改隔离级别

    Set session transaction isolation level read uncommitted;

    2、查看隔离级别

    Select @@tx_isolation

    3、事务的4种隔离级别

    (1)读未提交read uncommitted

    一个事务可以读到其他事务还没有提交的数据,会出现脏读。一个事务读到了另一个未提交事务修改过的数据,就是脏读。

    (2)读已提交read committed

    一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务对该数据进行一次修改并提交后,该事务能查询到最新的值,会出现不可重复读、幻读。

    如果一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询,能把另一个事务插入的记录也读出来,这就是幻读。

    (3)可重复读repeatable Read

    一个事务第一次读过某条记录后,即使其他事务修改了该记录的值并且提交,该事务之后再读该条记录时,读到的仍属第一次读到的值,而不是每次都读到不同的数据,这就是可重复读,这种隔离级别解决了不可重复,但还是会出现幻读。MySQL默认的隔离级别,其内部解决了幻读问题。

    (4)串行化serializable

    读未提交、读已提交、可重复读这几种隔离级别都允许对同一条记录进行读读、读写、写读的并发操作。如果不允许读写、写读的并发操作时,可以使用serializable隔离级别,这种隔离级别因为对同一条记录的操作都是串行的,所以不会出现脏读、幻读等现象。

    注意

    • Read uncommitted隔离级别:可能发生脏读、不可重复读、幻读问题。
    • Read committed隔离级别:可能发生不可重复读和幻读,但不会发生脏读问题。
    • Repeatable read隔离级别:可能发生幻读问题,不会发生脏读和不可重复读问题。
    • Serializable隔离级别:各种问题都不会发生。
    • 四种隔离级别是SQL的标准定义,不同的数据库有不同的实现,特别需要注意MySQL在repeatable read隔离级别下,是可以禁止幻读问题的发生的。
    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    es6箭头函数 this 指向问题
    vue脚手架搭建移动端项目--flexible.js
    vue通过自定义指令 v-py 将名字转拼音
    ES6相关
    闭包
    apply和call与this
    RPC
    Linux根目录下各目录文件类型及各项缩写全称
    网站分析相关
    [转]作为首席架构师,我是如何选择并落地架构方案的?
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14969749.html
Copyright © 2011-2022 走看看