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

    事务的特性(ACID)

    • 原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作但愿,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作

    • 一致性(Consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。

    • 隔离性(Isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的。同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。

    • 持久性(Durability):一旦事务提交,事务对数据库的所有更新将被保存到数据库,不能回滚。

    事务并发存在的问题

    • 脏读:事务读取了未提交的数据。如:事务A读取了事务B更新的数据,然后事务B回滚了,那么A读取到的数据是脏数据。

    • 不可重复读:在同一个事务中两次执行同样的查询,得到的结果不一致。如:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

    • 幻读:当某个事务在读取某个范围内的记录时,另一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。InnoDB可以通过多版本并发控制(MVCC)解决幻读的问题。

    事务隔离级别

    • READ UNCOMMITTED(未提交读):一个事务中的修改操作即使没有提交,对其他事务也都是可见的。会出现脏读的问题

    • READ COMMITTED(提交读):一个事务开始时,只能“看见”已经提交的事务所做的修改。解决了脏读的问题,但是会存在不可重复读的问题

    • REPEATABLE READ(可重复读):一个事务在多次读取同样记录时,结果是一致的。解决了脏读不可重复读的问题,但是无法解决幻读的问题

    • SERIALIZABLE(可串行化):在读取的每一行数据上都加锁,通过强制事务串行执行的方式,避免了脏读不可重复读幻读的问题,但是性能差

    隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
    读未提交(read-uncommitted) Yes Yes Yes No
    不可重复读(read-committed) No Yes Yes No
    可重复读(repeatable-read) No No Yes No
    可串行化(serializable) No No No Yes

    总结

    • 事务的隔离级别从高到低的排序为:可串行化 > 可重复读 > 不可重复读 > 读未提交
    • 不可重复读针对的是记录的修改操作,幻读针对的是记录的插入操作
    • MySQL默认的事务隔离级别是REPEATABLE-READ,可以通过show variables like 'transaction_isolation';命令查看
  • 相关阅读:
    New Audio Codec (3) : Design of a Scalable Parametric Audio Coder(可分级正弦模型)
    英国旅游庄园酒店
    圣塔芭芭拉加州大学 信号压缩实验室
    mptkcodec工程(二):VS2008+Win7 编译 mptkcodec(下)
    SPIHT 编码原理,代码,应用,专利问题
    Audio Bandwidth Extension 技术主页
    【quote】free HRTF Databases available online
    New Audio Codec (4) : Daryl Ning 的 Warped LPC and Wavelet Audio Coding 方案
    mptkcodec工程(二):VS2008+Win7 编译 mptkcodec(上)
    mptkcodec工程(一):Cygwin+Win7 编译 mptkcodec
  • 原文地址:https://www.cnblogs.com/pinxiong/p/13413582.html
Copyright © 2011-2022 走看看