谈谈Mysql之事务
来源:互联网 发布:可以看央视的网络电视 编辑:程序博客网 时间:2024/06/05 04:02
事务就是一组原子性的sql查询,或者是一个独立的工作单元。它具有ACID特性:
- A(atomicity) 原子性。一个事务的执行被视为一个不可分割的最小单元。事务里面的操作,要么全部成功执行,要么全部失败回滚,不可以只执行其中的一部分。
- C(consistency) 一致性。一个事务的执行不应该破坏数据库的完整性约束。如果上述例子中第2个操作执行后系统崩溃,保证A和B的金钱总计是不会变的。
- I(isolation) 隔离性。通常来说,事务之间的行为不应该互相影响。然而实际情况中,事务相互影响的程度受到隔离级别的影响。
- D(durability) 持久性。事务提交之后,需要将提交的事务持久化到磁盘。即使系统崩溃,提交的数据也不应该丢失。
事务的隔离级别
- Read Uncommitted(读取未提交内容):在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
- Read Committed(读取提交内容):这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
- Repeatable Read(可重读):这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
- Serializable(可串行化):这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
四种级别之间的比较
死锁
死锁是指两个或者多个事务在同一资源上互相占用,并请求对方所占有的资源,从而导致恶性循环的结果。
死锁产生的原因有两种:
- 数据冲突
- 存储引擎的实现引起
InnoDB引擎目前处理死锁的方法是:将持有最少的行级排它锁的事务进行回滚。(死锁回滚算法)
阅读全文
0 0
- 谈谈Mysql之事务
- 谈谈mysql的事务
- 【MySql】MySql之事务
- 谈谈事务
- 谈谈Mysql之间隙锁
- 谈谈Mysql之索引类别
- Mysql之事务
- mysql之事务
- mysql之事务
- mysql之事务、触发器
- MySQL学习之事务
- Mysql之事务
- mysql之事务详解
- mysql之分布式事务
- MySQL之事务特性
- mysql之分布式事务
- Mysql之事务
- mysql之事务详解
- linux/URG-&-PSH/调研tcp定时器/
- java多线程之java操作进程
- 各种AJAX方法的使用比较
- 最常用的 Eclipse 快捷键总结
- 每次登录都要执行source .basharc,否则ll等命令失效
- 谈谈Mysql之事务
- Leetcode题目之求解数组之间的最大距离
- Maven仓库的简介,学习
- GCD相关知识点
- Kotlin简单实用方法既使用Kotlin优雅的开发Android应用
- 单向RNN和双向RNN在mnist数据集上的分类实验
- 最全最好用的Android Studio插件整理
- JavaScript -- 几道面试题
- STM32空闲中断+DMA解决接收不定长数据问题