如何理解数据库事务?我的回答是:
2018-03-05 13:42
218 查看
数据库事务(简称‘事务’)
数据库事务是指作为单个逻辑工作单元执行的一系列数据库操作事务的特性
ACID(Atomicity-原子性;Consistency-一致性;Isolation-隔离性;Durability-持久性)原子性:把整个事务执行看作一个不可再分的原子,也就是整个事务里的操作要么全部执行,要么都不执行(回滚-ROLLBACK)
一致性:事务开始前和结束后,数据库原有的物理约束和逻辑约束保持一致(物理约束-外键,非空、唯一性约束等;逻辑约束-根据自己的业务逻辑而定,由开发人员保证)
隔离性:在并发环境下,各个事务执行过程中应该是相互隔离的。换句话说,如果两个事务同时操作同一条数据,事务1看到的数据要么是事务2修改之前的,要么是事务2修改之后的,不会看到事务2修改中间状态的数据
持久性:一旦事务提交,事务的所有的操作就都在数据库里面生效了,数据持久存在。(事务执行中,临时数据会保存到事务日志文件中,以便提交或回滚)
最重要的隔离级别
隔离级别由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。-Read uncommitted 读未提交
可以读取另一事务未提交的数据,违背了隔离性的原则,出现脏读;
脏读:事务1读取到了事务2的中间状态数据,事务2有可能再次修改此数据或回滚,导致事务1读取到的这个数据是脏数据;
-Read committed 读提交(Sql Server , Oracle默认隔离级别)
只能读取到另一个事务开始前或提交后的数据,解决脏读,出现不可重复读;
不可重复读:由于事务2的修改操作,事务1对同一数据的两次读取结果不一致;
-Repeatable-Read 重复读(mysql默认隔离级别)
开始读取操作时,不再允许另一事务修改数据,但是允许新添数据,解决不可重复读,出现幻读;
幻读:由于事务2的新增操作,事务1的两次读取操作结果数量不一致,无缘无故多出了一条,就像出现幻觉一样;
-Serializable 序列化执行
所有事务依序执行,没有并发,当然就不存在其他的并发问题,但是效率较低,对数据库的性能消耗也较大,通常不建议使用;
– | Read uncommitted | Read committed | Repeatable read | Serializable |
---|---|---|---|---|
脏读 | V | X | X | X |
不可重复读 | V | V | X | X |
幻读 | V | V | V | X |
传播行为
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
相关文章推荐
- 如何理解数据库中事务的原子性?
- 如何理解数据库事务隔离级别
- 如何理解数据库事务中的一致性的概念?
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- 深入理解Yii2.0 » Yii与数据库(TBD) » 事务(Transaction)
- Android 数据库事务的个人理解
- 2014-07-14 Java Web的学习(11)-----数据库分页&事务简单理解
- 如何理解事务的脏读,不可重复读,幻影读
- 多角度彻底理解数据库事务中的"脏读"."不可重复的读"及"虚读"
- 面试时如何回答对团队合作的理解
- 4000 事务如何理解
- [MySQL]数据库中如何处理多事务
- SQL Server 2000数据库的事务日志文件过大,如何将其缩小?
- Entity Framework 4.1延时加载与贪婪加载之我的理解和数据库中如何存入图片
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- 从事务的角度阐述数据库是如何执行转帐操作的
- 回答一位朋友的提问:在Delphi7下如何与DLL共享数据库连接
- 数据库事务的4个特性理解
- 自己理解的“数据库事务隔离级别”
- 数据库事务隔离级别理解