四个基本性质(ACID)
1.原子性(Atomicity)
事务中包含的操作要么全做要么全不做(all or none)。
2.一致性(consistency)
在事务开始以前数据处于一致性状态,事务结束后,数据也应处于一致性状态。
拿银行转账来说,一致性要求事务的执行不应该改变A、B两个账户的金额总和。如果没有这种一致性要求,转账过程中就会发生钱无中生有,或者不翼而飞的现象。事务应该把数据库从一个一致性状态转换到令一个一致性状态。
3.隔离性(isolation)
事务的隔离性要求系统必须保证事务不受其他并发执行的事务的影响,也既要达到这样的一个效果:对于任何一对事务T1和T2,对于T1来说,T2要么在T1之前执行,要么在T1之后执行。这样每个事务都感觉不到还有其他并行执行的事务的存在。
4.持久性(durability)
一个事务一旦完成,他对数据的改变必须是永久的。即使遇到故障也不会丢失,数据重要性决定了事务的持久性的重要性。
数据库的并发带来的问题
脏读
第二个事务读取到第一个事务尚未确认的数据。
1、事务A将数据x从原来的1000修改成2000
2、事务B在事务A未提交时,读到了x是2000
3、事务A回滚,最终x恢复成1000
最终x的正确值应是1000,而事务B读到了错误的x=2000的值
示例
1、Mary的工资是1000,财务把many的工资修改成了2000。
2、Mary查看自己的工资时发现时2000,非常高兴。
3、财务发现Mary的工资录入错误,立即又改回了1000。
Mary查询到自己的工资是2000就是脏数据,最终她是拿不到那么多的钱的。
不可重复读
一个事务在两次查询中得到的结果不一致。
1、事务A查询x的值是1000,事务未结束
2、事务B将x修改成2000
3、事务A再次查询x时,变成了2000
示例
1、Mary查询自己的工资是1000,操作尚未完成
2、财务将Mary修改成2000
3、当Mary再次查询自己的工资时发现变成了2000
幻象读
一个事务两次查询到的记录数量不相同
1、事务A统计出x=1000的记录数是10条,事务未结束
2、事务B向数据库中插入了一条x=1000的记录
3、事务A再次统计时发现x=1000的记录数变成了11条
示例
1、Mary查询自己2011年的工资条是10个(截止到10月,11月的工资还未发放)
2、财务正好录入了Mary的11月的工资条
3、当Mary再查询自己2011年的工资条时发现变成了11个,感到莫名其妙
设置和查看全局事务隔离级别(MySQL)
mysql默认隔离级别是Repeatable Read
SELECT @@global.tx_isolation;
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
设置和查看session事务隔离级别
SELECT @@session.tx_isolation;
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
设置和查看全局autocommit标记
SELECT @@global.autocommit;
SET GLOBAL autocommit = off / on;
分享到:
相关推荐
总结起来,理解并合理设置MySQL的事务隔离级别对于确保数据库系统的稳定性和正确性至关重要。开发者需要根据业务场景,权衡并发性能与数据一致性,选择最合适的事务隔离级别。同时,深入学习MySQL的源码和工具可以...
### ORACLE的隔离级别 #### 一、概念理解 **隔离级别**定义了事务与事务之间的隔离程度。在多用户环境中,多个事务并发执行时,可能会出现一些问题,如更新丢失、脏读、非重复读和幻像读等。为了减少这些问题的...
总结起来,GBase 8s的隔离级别按照并发性的高低排序为:脏读 > 最后提交读 > 提交读 > 游标读 > 可重复读。选择适当的隔离级别取决于应用程序的需求,需要在并发性和数据一致性之间找到合适的平衡点。在实际应用中,...
### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...
### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...
总结起来,ReadCommitted隔离级别是通过在每次查询时创建新的ReadView来实现的,这个机制允许事务读取那些在当前查询开始之前已经提交的修改。这样,即使在高并发环境下,每个事务都能在保持一定程度的数据一致性的...
总结来说,Oracle 数据库提供了多种事务隔离级别,以适应不同的并发需求和数据一致性保证。理解并正确选择隔离级别对于优化并发性能和维护数据完整性至关重要。开发和数据库管理员需要根据业务场景和性能需求来选择...
### 事务的隔离级别 在数据库管理中,事务的隔离级别是用于控制多个并发事务之间交互的方式,以确保数据的一致性和准确性。不同的隔离级别提供了不同程度的数据一致性保证,同时也会影响到系统的性能。根据提供的...
SQL Server 2005 中引入了快照隔离(Snapshot Isolation)机制,该机制可以提供非阻碍、非锁定的读取一致性,解决了传统的读取已提交(Read Committed)事务隔离级别下的争用问题。 快照隔离机制的核心思想是通过行...
Spring中的事务隔离级别的介绍 在Spring事务管理中,事务隔离级别是一个非常重要的概念,它定义了事务在并发执行时如何避免互相干扰和保持数据一致性。今天,我们将详细介绍Spring中的事务隔离级别,了解其特性和...
《深入理解MySQL锁与事务隔离级别》 在数据库管理中,锁和事务隔离级别是确保数据一致性与并发控制的重要概念。本文将详细阐述MySQL中的锁机制以及事务的四种隔离级别,以帮助读者更好地理解和应用这些关键概念。 ...
【MySQL锁与事务隔离级别详解】 在数据库管理系统中,锁是...总结来说,锁和事务隔离级别是MySQL保证数据一致性、防止并发操作引发问题的重要工具。正确理解和使用这些概念对于优化数据库性能和保证数据安全至关重要。
总结来说,Read Committed隔离级别通过ReadView机制实现了对数据一致性的重要保障,允许并发事务高效地运行而不引入脏读问题。理解这一机制有助于我们更好地设计和优化数据库事务,以满足不同场景下的需求。在实际...
总结来说,MySQL的事务隔离级别是通过特定的算法实现的,例如InnoDB存储引擎使用多版本并发控制(MVCC)来支持这些隔离级别。每个级别都有其适用场景,选择合适的隔离级别取决于应用程序的需求和对并发性能的影响。...
总结来说,MySQL通过隔离级别、锁和MVCC这三大机制,实现了在高并发环境下的数据一致性、可靠性和并发性能。理解这些机制的原理和相互关系,有助于在实际应用中做出合适的配置选择,提升数据库的性能和稳定性。
总结来说,Spring通过HibernateTemplate和JdbcTemplate提供了便捷的数据库操作,并且能够灵活地控制事务的传播特性和隔离级别。这使得开发者可以更专注于业务逻辑,同时确保数据操作的正确性和一致性。在实际开发中...
总结来说,MSSQL数据库的事务隔离级别和锁机制是确保数据安全和系统稳定的重要工具。它们允许数据库管理系统在多个并发事务之间进行协调,防止数据异常,并确保数据的一致性。理解和熟练运用这些概念,对于数据库...
总结来说,数据库的四种隔离级别分别是读未提交、读已提交、可重复读和串行化,它们分别针对不同的并发问题:脏读、不可重复读和幻读。理解这些隔离级别及其相互关系,对于理解和优化数据库系统的并发行为至关重要。...