隔離性是交易的保證之一,表示交易與交易之間不互相干擾,好像同時間就只有自己的交易存在一樣,隔離性保證的基本方式是在資料庫層面,對資料庫或相關欄位鎖定,在同一時間內只允許一個交易進行更新或讀取。
先來看看沒有對資料庫進行鎖定下,可能發生的問題:
基本上就是指某個交易對欄位進行更新的資訊,因另一個交易的介入而遺失。
例如,兩個以上交易在進行同一欄位的更新時,若沒有對欄位進行鎖定,若交易A進行COMMIT,交易B因故ROLLBACK,則交易A所作的更新就會發生遺失的問題:
-
交易A更新欄位1
-
交易B更新欄位1
-
交易A COMMIT
-
交易B ROLLBACK
另一種可能的情況是,如果交易A在交易B前後進行更新與COMMIT,則交易B所作的更新將會遺失,又稱為二次更新遺失(second
lost update),例如:
-
交易A更新欄位1
-
交易B更新欄位1
-
交易B COMMIT
-
交易A COMMIT
在以上的情況,交易B所進行的更新將會遺失。
兩個交易同時進行,其中一個交易更新資料,另一個交易讀取了尚未COMMIT的資料,就有可能發生髒讀問題。例如:
-
交易A更新欄位1
-
交易B讀取欄位1
-
交易A ROLLBACK
-
交易B COMMIT
在以上的情況下,交易B讀取的是不正確的資料。
-
無法重複的讀取(unrepeatable read)
某個交易兩次讀取同一欄位的資料並不一致,例如,如果交易A在交易B前後進行資料的讀取,則會得到不同的結果。
-
交易A讀取欄位1
-
交易B更新欄位1
-
交易B COMMIT
-
交易A讀取欄位1
在以上的情況,交易A讀取兩次欄位1,但卻得到不同的結果。
如果交易A進行兩次查詢,在兩次查詢之中有個交易B插入一筆新資料或刪除一筆新資料,第二次查詢時得到的資料多了第一次查詢時所沒有的筆數,或者少了一筆。
-
交易A進行查詢得到五筆資料
-
交易B插入一筆資料
-
交易B COMMIT
-
交易A進行查詢得到六筆資料
隔離交易的基本方式是鎖定資料庫,但完全的鎖定資料庫實務上並不會這麼作,因為完全的鎖定資料庫將導致嚴重的效能問題,因此實務上會根據資料讀寫更新的頻繁性,設定不同的交易隔離層級(transaction
isolation level):
簡而言之,某個交易可以讀取另一個交易已更新但尚未commit的資料,所以允許dirty
read,但不允許lost
update,也就是允許交易B讀取交易A更新尚未COMMIT的資料,但在交易A進行COMMIT前,不允許其它交易再寫入(也就是寫入鎖定)。
這個隔離層級讀取錯誤資料的機率太高,一般不會採用這種隔離層級。
讀取的交易不會阻止其它的交易,一個未COMMIT的交易會阻止其它寫入的交易。
比read
uncommited嚴格一些,簡而言之,某個交易僅可讀取另一個交易已commit的資料,所以允許unrepeatable
read,但不允許dirty read,一筆交易正在讀取資料時,允許另一筆交易進行資料寫入,但不允許已經dirty的資料被讀取或寫入(shared read
lock, exclusive write lock)。
讀取的交易不會阻止其它的交易,一個未COMMIT的交易會阻止其它所有的交易。
比read
commited嚴格,在一個交易己讀取的資料,不允許其它交易進行資料寫入,不允許unrepeated read,但phantom
read還是可能發生。
讀取的交易不會阻止其它讀取的交易,但會阻止其它寫入的交易,而寫入的交易會阻止所有其它的交易。
最嚴格的隔離層級,同一筆資料一次只能有一個交易,無法讓交易並行處理。
read
uncommited出錯的機率太大,大部份的應用程式會選用read commited或repeatable
read的隔離層級,而serializable執行完全的鎖定,嚴重傷害系統效能。
真正的鎖定系統是在資料庫系統上實作的,依各家廠商而有所不同,必須參考廠商的說明書,了解不同的隔離層級對應用程式的效能與擴展性有何影響。
以下整理隔離層級對多個交易並行處理的影響,YES表示會發生問題:
隔離層級
|
Dirty
Read
|
Unrepeatable
Read
|
Phantom
Read
|
Read uncommitted
|
YES
|
YES
|
YES
|
Read committed
|
NO
|
YES
|
YES
|
Repreatable read
|
NO
|
NO
|
YES
|
Serializable
|
NO
|
NO
|
NO
|
分享到:
相关推荐
1.说到数据库事务,⼈们脑海⾥⾃然不⾃然的就会浮现出事务的四⼤特性、四⼤隔离级别、七⼤传播特性。 四⼤还好说,问题是七⼤传播特性是哪⼉来的?是Spring在当前线程内,处理多个数据库操作⽅法事务时所做的⼀种...
本项目为一个简单的JDBC项目,包括:MySQL数据库在...然后还在封装的JDBCUtils工具类中增加的jJDBC事务,可以进行数据的手动提交与回滚,以求达到sql语句的原子性,一致性,隔离性,以及持久性,不轻易的修改数据库。
隔离性:事务不可见行,事务与事务之间分离不可见。持久性:事务一旦提交,其结果就是永久性的,即使发生宕机,数据也是可以恢复的。 1.扁平事务 扁平事务是事务中最简单的一种,也是使用最频繁的,在扁平事务中,...
事务是个很精妙的存在,我们在数据层、服务层、业务逻辑层等多处地方都会使用到。 在这里我只说下TransactionScope这个微软推荐使用的隐式事务。它是从Framework 2.0开始引入的一个事务管理类,在使用隐式事务时,...
丛林数据库 JungleDB是NodeJS(LMDB或LevelDB)和浏览器(IndexedDB)的简单数据库抽象层,支持高级功能,例如具有读取隔离和辅助索引的事务。快速开始使用jungle-db的最简单选择是从npm存储库中安装它。 npm ...
事务的并发性错误和事务隔离级别;面向对象三层架构设计;MVC模型(模型Model-视图View-控制器Controller);三层架构与MVC的区别;LINQ;LINQ to ADO.NET;数据定义语言;SQL Server错误号为4060表示何总错误。;连接池...
数据通过软件事务存储API进行管理,该API使用多版本并发控制(MVCC)存储指针值,并且事务隔离由单个指针的读/写锁定系统强制实施。 内存指针值和数据事务的状态存储为有状态参与者的系统。 存储平台顶部的其他软件...
当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定四种类型的并发访问策略,每一种策略...
本篇文章会简单对MYSQL的逻辑结构、并发控制、事务、多版本控制和存储引擎等知识点进行梳理。 1 MYSQL逻辑结构 MYSQL逻辑结构如图所示,最上层服务主要包括连接管理、授权认证等;第二层服务是整个MYSQL的核心层...
能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索、...已提交读隔离级别下的事务在每次查询的开始都会生成一个独立的ReadView,而可重复读隔离级别则在第一次读的时候生成一个ReadV
Q7:MySQL 的隔离级别有哪些? Q8:MVCC 是什么? Q9:谈一谈 InnoDB Q10:谈一谈 MyISAM Q11:谈一谈 Memory Q12:查询执行流程是什么? Q1:MySQL 的逻辑架构了解吗? 第一层是服务器层,主要提供连接处理、授权...
ForestDB 是一个快速的 Key-Value 存储引擎,基于层次B 树单词查找树。...可针对每个 ForestDB 数据库文件配置手工和自动的压缩支持 read_committed 或者 read_uncommitted 事务隔离级别 标签:ForestDB
在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样,这是 指事务的_隔离_性。 24.在SQL/CLI中,保存元组或参数的有关信息的是__描述记录__。 25.在面向对象技术中,对象联系图是描述面向对象_...
隔离级别 七.更新多个数据库 八.Web 组件事务 第15章 安全 一.纵览 二.安全角色 三.Web层安全 四.EJB层安全 五.应用程序客户端层安全 六.EIS(Enterprise Information System)层安全 七.传递安全身份 八....
4.3 事务隔离、传播属性的设置 198 4.3.1 并发访问和隔离 198 4.3.2 事务属性 199 4.4 EJB的事务管理 201 4.4.1 容器管理事务(CMT) 201 4.4.2 Bean管理事务(BMT) 201 4.5 事务超时设置 201 4.6 本章小结 203 第5章 ...
Dubbo + TCC分布式事务 业务细分 用户类别: 用户模块:用户+邮件,涉及用户,角色,邮件,邮件文本,余额表 产品模块:产品,涉及产品,类别表 新闻模块:新闻,涉及新闻表 订单清单:order,涉及order表 邮件样本 ...
requerd:必须的(默认),如果A有事务那么就加入A的事务,如果A没有事务那么单独创建一个事务 supports,如果A有事务则加入,如果没有就算了 隔离级别 default:使用数据库默认的隔离级别(mysql:可重复读,oracle:读...
隔离级别 212 七.更新多个数据库 212 八.Web 组件事务 214 第15章 安全 215 一.纵览 215 二.安全角色 216 三.Web层安全 217 四.EJB层安全 219 五.应用程序客户端层安全 220 六.EIS(Enterprise Information ...
事务具有原⼦性 (Atomic) 、 ⼀致性 (Consistency) 、 隔离性 (Isolation) 和持久性(Durabiliy)四个特性,简称 ACID。 4.设有两个事务 T1、T2,其并发操作如图 5.1 所示,下列评价正确的是________。 A....