标签: MySQL事务 隔离

0.什么是事务?

事务是指MySQL的一些操作看做是一个不可分割的执行单元。事务的特点是要么所有操作都执行成功,要么一个都不执行。也就是如果一个事务有操作执行失败,那么就会撤销该事物之前的所有操作,使数据库回到事务开始前的状态,此时就像什么事也没发生过一样。

1.事务的ACID特性

  • 原子性Atomicity:事务的所有操作是一个不可分割的整体,要么都完成,要么都不做。
  • 一致性Consistency:数据库保持从一个一致的状态到另一个一致的状态。如果一个事务执行了一部分,操作已经写入到物理数据库,此时发生了系统故障导致事务中断,但事务对数据库的修改又不可撤销了,此时数据库就处于一个不一致的状态。
  • 隔离性Isolation:事务的操作是相互隔离,互不干扰的。(但是结果会有影响,如可看到其他事务操作的结果)
  • 持久性Durability:事务的执行结果一旦完成就会对数据库造成永久改变,接下来的操作或故障不会对其有任何影响。

2.事务间可能出现的问题

  • 脏读:一个事务读取到另一个事务的操作结果,但另一个事务之后又回滚撤销了,导致读取的结果有不存在的情况。
  • 不可重复读:两次select结果不同。一个事务内的其他实例做了更新,一个实例在更新前后两次查询结果不同。
  • 幻读:两次select结果不同。一个事务查询之后,另一个事务做了插入操作,此时这个事务再查询发现比第一次查询多了一些行,两次查询结果不同。

3.四种事务隔离级别

  • Read Uncommitted(读未提交):本事务可以读取其他事务未提交的结果。会导致脏读、不可重复读、幻读。
  • Read committed(读已提交):本事务只能读取其他事务提交后的结果。会导致不可重复读、幻读。
  • Repeatable Read(可重复读):保证同一事务的多个实例读取到相同的结果。会导致幻读。InnoDB使用多版本并发机制(MVCC)解决该问题。
  • Serializable(可串行化):在数据上加锁,锁定数据,使事务之间不可能发生冲突。会导致事务大量超时和锁竞争。让事务之间完全的隔离。不会导致事务之间出现的问题。

上面四种隔离程度依次是由低到高,处理并发效率由高到低。

4.MySQL选取隔离级别命令

用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。

语法如下:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

注意:默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。

使用GLOBAL在全局对从开始创建的所有新连接设置事务级别。需要最高权限。

使用SESSION在当前连接上执行的事务设置事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。

查询全局和会话事务隔离级别:

SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

5.总结

  • 在低级别隔离,当多个事务并发执行时会导致多种问题,但是并发性好,可高效执行多个事务。
  • 在高级别隔离,多个事务并发执行不会导致太多问题,但并发性差,执行多个事务效率低下。
  • MySQL的InnoDB默认隔离是Repeatable Read(可重复读),oracle等多数数据库使用Read Committed(读已提交)。
  • 实际中,在会计、银行、证券公司、股票等需要使用高安全性之外,为了兼顾并发性能其他要求相对低的应用可以使用级别较低的隔离。具体使用哪个,还是要由项目的需求决定。

参考:

http://www.linuxidc.com/Linux/2017-02/140848.htm

http://www.3lian.com/edu/2014/05-05/145482.html

http://blog.itpub.net/195110/viewspace-1080777/

http://www.cnblogs.com/tekkaman/p/5150663.html

MySQL事务及隔离级别(读书小结)的更多相关文章

  1. MySQL事务学习-->隔离级别

    MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...

  2. MySQL事务及隔离级别详解

    MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...

  3. MySql事务及隔离级别

    在数据库中,所谓事务是指作为单个逻辑工作单元执行的一系列操作. 事务的操作: 先定义开始一个事务,然后对数据作修改操作, 这时如果提交(COMMIT),这些修改就永久地保存下来 如果回退(ROLLBA ...

  4. MySql事务的隔离级别及作用

    逻辑工作单元遵循一系列(ACID)规则则称为事务. 原子性:保证事务是一系列的运作,如果中间过程有一个不成功则全部回滚,全部成功则成功.保证了事务的原则性. 一致性:一致性指的是比如A向B转100块钱 ...

  5. [转]MySQL事务学习-->隔离级别

    From : http://blog.csdn.net/mchdba/article/details/12837427 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性 ...

  6. MySQL事务的隔离级别

    为什么需要隔离 当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种 ...

  7. mysql 事务、隔离级别

    一.事务的四大特性(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...

  8. MySQL——事务ACID&隔离级别

    数据库事务ACID&隔离级别 什么是事务 事务是用户定义的一个数据库操作序列.这些操作要么全执行,要么全不执行,是一个不可分割的工作单元.在关系型数据库中,事务可以是一条SQL语句,也可以是一 ...

  9. MySQL 事务的隔离级别

    转载:https://developer.aliyun.com/article/743691?accounttraceid=80d4fddb3dc64b97a71118659e106221tozz 简 ...

随机推荐

  1. 利用jsencrypt 做非对称加密

    1.生成 private key openssl genrsa -out rsa_1024_priv.pem 1024 2.生成public key openssl rsa -pubout -in r ...

  2. linux的date命令使用指定时间的加减方法与异常

    在一般网页里,date命令减时间方法为: date -d '-100 days' 我的需求是,在指定时间上减8小时.按一般理解来看,命令写成如下样子(有异常错误的写法): date -d " ...

  3. Azure web site和web job的config文件加密方式

    1.分析 由于Azure Web AppService平台的特殊性,所以在C#中原先的config加密方法DataProtectionConfigurationProvider和RSAProtecte ...

  4. 使用Zabbix的SNMP trap监控类型监控设备的一个例子

    本文以监控绿盟设备为例. 1.登录被监控的设备的管理系统,配置snmptrap地址指向zabbix服务器或代理服务器. snmptrap地址也叫陷阱. 2.验证是否能在zabbix服务器或代理服务器上 ...

  5. 通过iLO进行Zabbix监控——针对HP服务器集成

    iLO 全名是 Integrated Lights-out,它是惠普某些型号的服务器上集成的远程管理端口,它能够允许用户基于不同的操作系统从远端管理服务器,实现了虚拟存在和控制,从而进行智能型基础构架 ...

  6. 如何防范和应对Redis勒索,腾讯云教你出招

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 9月10日下午,又一起规模化利用Redis未授权访问漏洞攻击数据库的事件发生,此次 ...

  7. 琴声不等式--jensen

    (来自百度百科) 1. 凹函数,不加权 2. 凹函数,加权 3. 凸函数,不加权 4. 凸函数,加权 应用 在EM算法Q函数的推导中,用到了第二个不等式(凹函数,加权)

  8. linux 其他知识目录

    博客目录总纲首页 为博客园添加目录的方法总结 linux 命令自动补全包 手动配置网卡 nginx日志统计 Linux 深入理解inode/block/superblock /proc/sys目录下各 ...

  9. ClickOnce 创建桌面快捷方式

    static void Main() { bool bCreatedNew; Mutex m = new Mutex(false, "TestClickOnceClientName" ...

  10. 奔跑吧DKY——团队Scrum冲刺阶段博客汇总

    第一周:团队展示 团队选题 需求规格说明书 第二周:完善需求规格说明书.制定团队编码规范.通过团队项目数据库设计 奔跑吧DKY--团队Scrum冲刺阶段-Day 1-领航 奔跑吧DKY--团队Scru ...