美文网首页
MySQL-事务

MySQL-事务

作者: 苏近之2017 | 来源:发表于2017-06-06 16:40 被阅读0次

ACID 测试

ACID 表示原子性、一致性、隔离性和持久性。一个运行良好的事务处理系统,必须具备这些标准概念。

原子性

一个事务必须被视为一个不可分割的最小工作单元。

一致性

一个事务中所有语句,要么成功,要么失败。

隔离性

一个事务所做的修改,在最终提交以前,对其他事务是不可见的。

隔离级别

隔离性其实比想象的更复杂。

  1. READ UNCOMMITTED(未提交读)

    在这个级别中,事务中的修改,即使没有提交,对其他事务也都是可见的。

    这种读被称为"脏读"。在实际应用中一般很少使用。

  2. READ COMMITTER(提交读)

    大多数数据库系统的默认隔离级别都是 READ COMMITTER(但 MYSQL不是)。

    即,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。

    这个级别有时候也叫做不可重复读(nonrepeatable read),因为两次执行同样的查询,可能会得到不一样的结果。

  3. REPEATABLE READ(可重复读)

    这个级别解决了脏读的问题。该级别保证了同一个事务中多次读取同样的记录的结果是一致的。

    理论上,可重复读隔离级别还是无法解决另外一个幻读(Phantom Read)的问题。

    所谓幻读,指的是某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)。

    image
  4. SERIALIZABLE(可串行化)

    这是最高的隔离级别。

    避免了幻读的问题。

    会在读取的每一行数据上加锁,所以可能导致大量的超时和锁争用的问题。

    实际应用中也很少用到这个级别。只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑使用这一级别。

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
READ UNCOMMITTER YES YES YES NO
READ COMMITTER NO YES YES NO
REPEATABLE READ NO NO YES NO
SERIALIZABLE NO NO NO YES

持久性

一旦事务提交,则其所做的修改就会永久保存到数据库中。

死锁问题

死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。

image

为了解决死锁导致非常慢的查询,数据库系统实现了各种死锁检测和死锁超时的机制。

锁的行为和顺序是和存储引擎相关的,以同样的顺序执行语句,有些引擎会产生死锁,有些则不会。

死锁产生有双重原因:

  • 有些是因为真正的数据冲突,这种情况很难避免
  • 但有些则完全是由于存储引擎的实现方式导致的

死锁产生后,只有部分或者完全回滚其中的一个事务,才能打破死锁。

事务日志

事务日志可以帮助提供事务的效率。

使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久的硬盘上的事务日志中,而不用每次都将修改的数据持久到硬盘。

所以,修改数据需要写两次磁盘。

MySQL 中的事务

MySQL 提供了两种事务型的存储引擎:InnoDB 和 NDB Cluster。另外还有一些第三方存储引擎,比如 XtraDB 和 PBXT。

MYSQL 采用自动提交的模式。也就是说如果不显式地开启一个事务,则每个查询都被当做一个事务执行提交操作。

可以执行如下命令设置隔离级别:

SET TRANSACTION ISOLATION LEVEL [隔离级别]

在同一事务中,使用多种存储引擎是不可靠的。

相关文章

  • 08 MySQL-初识MySQL-事务-隔离鉴别

    如果没有特别说明,都是默认autocommit=1 根据我的第三篇03 MySQL-初识MySQL-事务隔离级别提...

  • MySQL-事务

    ACID 测试 ACID 表示原子性、一致性、隔离性和持久性。一个运行良好的事务处理系统,必须具备这些标准概念。 ...

  • Mysql-事务

    事务特性ACID 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,...

  • Mysql-事务

    MySQL 数据库中事务是用户一系列的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。 为什...

  • Mysql-事务

    数据库事务4个特性 by shihang.mai 简称:ACID 特性解析原子性要么全部成功,要么全部失败一致性当...

  • mysql-事务

    http://baijiahao.baidu.com/s?id=1581064626251873652&wfr=s...

  • MYSQL-事务原理

    ACID模型 MYSQL传统关系数据库的ACID模型有以下特性 Atomicity原子性:一个事务中所有操作都必须...

  • # MySQL-事务介绍

    --- [TOC] --- # MySQL事务 ## ACID 1.**原子性(Atomcity)** 一个事务的...

  • MySQL-事务(Transaction)

    MySQL事务 特性(ACID): 原子性(automicity):要不全部成功,要不全部失败 一致性(consi...

  • MySQL-事务&MVCC

    前置文章:一、MySQL-存储引擎[https://www.jianshu.com/p/495108c767bc]...

网友评论

      本文标题:MySQL-事务

      本文链接:https://www.haomeiwen.com/subject/zyfnfxtx.html