1、什么是事务
指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
2、事务的4个特性
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
3、每个特性的意思
。原子性

原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
如,A向B转钱,在事务中的扣款和加款两条语句,要么都执行,要么都不执行。
。一致性
一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。
如,A和B存款总额为1000,A向B转钱,无论失败,最终A和B的存款总额依然为1000.
。隔离性
多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
数据库多个事务之间操作可能出现的问题以及事务隔离级别是这篇文章介绍的重点。
。持久性
持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。
4、事务并发产生的问题
。脏读(dirty read)
一个事务读取到了另外一个事务没有提交的数据
     事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
。不可重复读(nonrepeatable read)
在同一事务中,两次读取同一数据,得到内容不同
     事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致
。幻读(phantom read)
同一事务中,用同样的操作读取两次,得到的记录数不相同
     系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样
5、MySQL的4种隔离级别
。Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。
     读取未提交的数据,则会发生赃读
。Read Committed(读取提交内容)
一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别,但非MySql
     一个事务多次读取的过程中,另一个事务可能对同一条数据做修改并提交,导致前一个事务多次读取到的数据不一致,则会发生不可重复读
。Repeatable Read(可重读)
它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。这是MySql的默认隔离级别
     但,此级别依然会发生幻读
。Serializable(可串行化)
它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题
隔离级别 读数据一致性 赃读 不可重复读 幻读
Read Uncommitted 最低级别,只能保证不读取物理上损坏的数据
Read Committed 语句级 ×
Repeatable Read 事务级 × ×
Serializable 最高级别,事务级 × × ×
总结
。事务用来管理 insert,update,delete 语句
。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行
。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
。低级别的隔离一般支持更高的并发处理,并拥有更低的系统开销。高级别的隔离可靠性较高,但系统开销较大。
。mysql中默认事务隔离级别是可重复读时并不会锁住读取到的行。
。事务隔离级别为读提交时,写数据只会锁住相应的行。
。事务隔离级别为可重复读时,如果有索引(包括主键索引)的时候,以索引列为条件更新数据,会存在间隙锁间隙锁、行锁、下一键锁的问题,从而锁住一些行;如果没有索引,更新数据时会锁住整张表
。事务隔离级别为串行化时,读写数据都会锁住整张表
。隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
参考

https://segmentfault.com/a/1190000014837747#articleHeader0 https://segmentfault.com/a/1190000014811125   http://blog.itpub.net/31559358/viewspace-2221931/

仅供自己 温故而知新

MySQL事务,事务隔离级别详解的更多相关文章

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

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

  2. SQL Server事务、隔离级别详解(二十九)

    前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...

  3. SQL Server-聚焦事务、隔离级别详解(二十九)

    前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...

  4. MySQL 四种隔离级别详解,看完吊打面试官

    转发链接:https://zhuanlan.zhihu.com/p/76743929 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就 ...

  5. mysql 事务隔离级别 详解

    问题 在工作中真实遇到的问题:用python连接mysql,查询数据,同时有别的代码在更新mysql中的数据,前者是一直是保持连接的数据库,每一分钟select一次,但第二次却查不到更新后的数据?wh ...

  6. mysql 事务隔离级别详解

    事物的 隔离级别,说简单非常简单(新手也能说出 是个隔离级别 和 影响),说男也非常难.(很多 有几年编程 经验的程序员依旧搞不清楚) 废话不多少 直接开始: 事务的隔离级别 是用来描述 事务的读关系 ...

  7. MySQL 四种事务隔离级别详解及对比--转

    http://www.jb51.net/article/100183.htm 接的隔离级别.它的语法如下: ? 1 SET [SESSION | GLOBAL] TRANSACTION ISOLATI ...

  8. mysql事务_事务隔离级别详解

    使用事务语法 1. 开启事务start transaction,可以简写为 begin 2. 然后记录之后需要执行的一组sql 3. 提交commit 4. 如果所有的sql都执行成功,则提交,将sq ...

  9. SqlServer事务详解(事务隔离性和隔离级别详解)

    概述 不少人对于事务的使用局限于begin transaction:开始事务.commit transaction:提交事务.rollback transaction:回滚事务的初步运用. 并且知道使 ...

随机推荐

  1. snv的使用

    1.搭建SVN服务器 (1)直接安装 (2)创建工号,分组,分配权限(图形化界面的直接操作,非图形界面的需要改配置文件conf文件夹下) (3)创建仓库,D:\Repositories\OA:cmd命 ...

  2. Python:matplotlib绘制散点图

    与线型图类似的是,散点图也是一个个点集构成的.但不同之处在于,散点图的各点之间不会按照前后关系以线条连接起来. 用plt.plot画散点图     奇怪,代码和前面的例子差不多,为什么这里显示的却是散 ...

  3. Chrome 75 & lazy-loading

    Chrome 75 & lazy-loading https://addyosmani.com/blog/lazy-loading/ https://chromestatus.com/feat ...

  4. CSS 的三种样式 内联 内部 外部

    CSS:层叠样式表的缩写 就是 Cascading Style Sheets Cascading Style Sheets : 层叠样式表 优先级问题 :遵守就近原则  内联> 内部>外部 ...

  5. LODOP 获取打印设计代码不带INIT初始化语句

    前面的博文生成JS代码模版和文档式模版,生成的是带初始化语句的模版,如果想要打印多个,可以循环多个任务,什么是一个任务,可查看本博客相关博文:Lodop打印语句最基本结构介绍(什么是一个任务)一个任务 ...

  6. Lodop背景图无图片时显示放大叉号问题

    正常情况下,如果指定图片路径中,图片不存在或指定错误的路径,会因为找不到图片显示叉号,Lodop背景图如果设置了背景图宽度高度控制,显示的叉号也会被相应的放大,形成放大的模糊的图案,看起来就像是黑色边 ...

  7. Hibernate最佳实战

    1:一对一,一对多,多对多双向管理必设mappedBy ,将关系交给乙方维护,不然的话会在双方都建立关系,比如一对一双向的时候双方都会保存对方的id外键管理 具体在项目中采用双向还是单项看实际情况. ...

  8. springmvc拦截器匹配规则

  9. maven 当两个工程合并后 他的classpath也合并了

    maven   当两个工程合并后 他的classpath也合并了  也就是说资源文件环境合并了

  10. PKU2018校赛 H题 Safe Upper Bound

    http://poj.openjudge.cn/practice/C18H 题目 算平均数用到公式\[\bar{x}=\frac{x_1+x_2+x_3+\cdots+x_n}{n}\] 但如果用in ...