zoukankan      html  css  js  c++  java
  • MySQL数据库的隔离级别

    MySQL数据库同Postgres一样,数据库有四种隔离级别

    低级别的事务隔离可以提高事务的并发访问性能,却可能导致较多的并发问题(例如脏读、不可重复读、幻读等并发问题);高级别的事务隔离可以有效避免并发问题,但会降低事务的并发访问性能,可能导致出现大量的锁等待、甚至死锁现象。 

    1,read uncommitted(读取未提交的数据)
    在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。该隔离级别很少用于实际应用。
    2,read committed(读取提交的数据)
    这是大多数数据库系统的默认隔离级别(如Oracle和Postgres等,但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已提交事务所做的改变。
    3,repeatable read(可重复读)
    这是MySQL默认的事务隔离级别,它确保同一事务内相同的查询语句,执行结果一致。
    4,serializable(串行化)
    这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突。换言之,它会在每条select语句后自动加上lock in share mode,为每个查询操作施加一个共享锁。在这个级别,可能导致大量的锁等待现象。该隔离级别主要用于InnoDB存储引擎的分布式事务。

    脏读(Drity Read):一个事务可以读到另一个事务未提交的数据,脏读问题违背了事务的隔离性原则。
    不可重复读(Non-repeatable read):同一个事务内两条相同的查询语句,查询结果不一致。
    幻读(Phantom Read):同一个事务内,两条相同的查询语句,查询结果应该相同。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,对此InnoDB存储引擎采用了多版本并发控制(MVCC)机制来解决幻读问题。
    合理地设置事务的隔离级别,可以有效避免脏读、不可重复读、幻读等并发问题。

  • 相关阅读:
    LeetCode-434-字符串中的单词数
    LeetCode-415-字符串相加
    字符串
    序列
    元组
    列表
    repr()与str的区别
    输出函数print()
    输入函数input()
    MySQL中快速复制数据表方法汇总
  • 原文地址:https://www.cnblogs.com/jinli1771/p/13084724.html
Copyright © 2011-2022 走看看