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. mvn clean compile package install deploy

    (1) package 目的是打包,在pom中,如果是jar就会打包成jar,如果是war就会打包成war 在pom.xml中: <modelVersion></modelVersi ...

  2. web浏览器兼容问题

    1.居中问题 div中,ie默认居中,而ff(firefox)默认是向左对齐.解决办法:margin 0 auto 2.高度问题 如果有两个div排列或者嵌套,如果第一个div设置了高度,而内容超出d ...

  3. css的特性

    一.继承性: 继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代. /* 不具有继承性的css样式: */p{border:1px solid red;} 二.特殊性(优先 ...

  4. 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件

    在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件  当触发事件时候 会把当前的dom传给该方法

  5. HTC Vive 基础入门 基于Unreal Engine 4引擎

    主要以讲解介绍HTC Vive设备以及Unreal继承的Steam VR Plugin为主 使用最新的虚幻引擎与Plugin完成VR环境的搭建 然后完成一个基本的VR Games. 任务5: 04-配 ...

  6. 一条命令停止所有lxc容器,删除所有lxc容器

    for i in $(virsh -c lxc:/// list | grep -v 'Id' | awk '{print $2}');do virsh -c lxc:/// destroy ${i} ...

  7. IntelliJ IDEA 导航的 20 大特性

    本文由 ImportNew - elviskang 翻译自 dzone.欢迎加入翻译小组.转载请见文末要求. 在前面的文章里,我介绍了IntelliJ IDEA(以下称IntelliJ)中与代码补全及 ...

  8. BZOJ1430小猴打架——prufer序列

    题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架 的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打架之后,整个森林的小猴都会 ...

  9. Android EditView 获取焦点 不弹出软键盘

    很简单的做法: 找到AndroidManifest.xml文件 然后在对应的activity中增加android:windowSoftInputMode="adjustPan" & ...

  10. mysql索引技巧

    索引 索引是对数据表一列或多列的值进行排序的一种结构,用于加速基于索引字段的数据排序以及优化查询的执行速度,避免全表扫描.索引是直接影响数据库性能的数据库模式对象,因此十分重要.在定义主键和唯一键约束 ...