搜尋
首頁資料庫mysql教程資料庫之-四種交易隔離等級的淺談

資料庫提供了四種事務隔離等級, 不同的隔離等級採用不同的鎖類開來實作.

在四種隔離等級中, Serializable的等級最高, Read Uncommited等級最低.
大多數資料庫的預設隔離等級為: Read Commited,如Sql Server , Oracle.
少數資料庫預設的隔離等級為Repeatable Read, 如MySQL InnoDB儲存引擎
即使是最低的級別,也不會出現第一類丟失更新問題.  
1. 髒讀(事務沒提交,提前讀取):臟讀就是指當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也存取這個數據,然後使用了這個數據。
2. 不可重複讀(兩次讀的不一致) :是指在一個交易內,多次讀相同資料。在這個事務還沒結束時,另外一個事務也存取該相同資料。那麼,在第一個事務中的兩次讀取資料之間,由於第二個事務的修改,那麼第一個事務兩次讀到的的資料可能是不一樣的。這樣就發生了在一個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。例如,一個編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當編輯人員第二次讀取文件時,文件已更改。原始讀取不可重複。如果只有在作者全部完成編寫後編輯人員才可以讀取文檔,則可以避免該問題。
3. 幻讀 : 是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好像發生了幻覺一樣。例如,一個編輯人員更改作者提交的文檔,但當生產部門將其更改內容合併到該文檔的主副本時,發現作者已將未編輯的新資料新增至該文檔。如果在編輯人員和生產部門完成原始文件的處理之前,任何人都無法將新資料新增至文件中,則可以避免該問題。
4.第一類更新遺失(回滾遺失):
  當2個事務更新相同的資料來源,如果第一個事務被提交,而另外一個事務卻被撤銷,那麼會連同第一個事務所做的跟新也被撤銷。也就是說第一個事務做的跟新遺失了。
5.第二類更新丟失(覆蓋丟失):
  第二類更新丟失實在實際應用中經常遇到的並發問題,他和不可重複讀本質上是同一類並發問題,通常他被看做不可重複讀取的特例:當2個或這個多個事務查詢同樣的記錄然後各自基於最初的查詢結果更新該行時,會造成第二類丟失更新。因為每個事務都不知道不知道其他事務的存在,最後一個事務對記錄做的修改將覆蓋其他事務對該記錄做的已提交的跟新...
補充: 基於元數據的Spring 聲明性事務:

Isolation 屬性一共支援五種事務設置,具體介紹如下:

#
l          DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 . 
l          READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 ) 
l          READ_COMMITTED  会出现不可重复读、幻读问题(锁定正在读取的行) 
l          REPEATABLE_READ 会出幻读(锁定所读取的所有行) 
l          SERIALIZABLE 保证所有的情况不会发生(锁表)

不可重复读的重点是修改 :
同样的条件 ,   你读取过的数据 ,   再次读取出来发现值不一样了
幻读的重点在于新增或者删除
同样的条件 ,   第 1 次和第 2 次读出来的记录数不一样

----------------------------------------------------------
事务传播行为种类

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,

它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

表1事务传播行为类型

事务传播行为类型
 说明
 
PROPAGATION_REQUIRED
 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
 
PROPAGATION_SUPPORTS
 支持当前事务,如果当前没有事务,就以非事务方式执行。
 
PROPAGATION_MANDATORY
 使用当前的事务,如果当前没有事务,就抛出异常。
 
PROPAGATION_REQUIRES_NEW
 新建事务,如果当前存在事务,把当前事务挂起。
 
PROPAGATION_NOT_SUPPORTED
 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
 
PROPAGATION_NEVER
 以非事务方式执行,如果当前存在事务,则抛出异常。
 
PROPAGATION_NESTED
 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
 
 ---------------------------------------------------------
 simple就是什么模板都不要,xhtml是默认的,带一些struts2提供的模块,
例如有可能在你的表单中加入form ...>

 
主要是方便界面警告和错误消息处理以及页面验证
查看一下struts.properties

org/apache/struts2/default.properties
struts.ui.theme=xhtml  
struts.ui.templateDir=template  
struts.ui.templateSuffix=ftl  
你可以在struts.xml中添加
<constant name="struts.ui.theme" value="simple" />来修改这个参数

最后一个顾名思义就是结合css来处理这些内容。如果你初学可以不考虑这些,如果不希望这些模板内容对你的开发有影响可以改为simple。
如果要如果你的页面用了css布局,又想用struts2的增强功能就用css_xhtml,可以得到较好的用户体验。
   

以上是資料庫之-四種交易隔離等級的淺談的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

sybase是什么数据库sybase是什么数据库Sep 22, 2021 am 11:39 AM

sybase是基于客户/服务器体系结构的数据库,是一个开放的、高性能的、可编程的数据库,可使用事件驱动的触发器、多线索化等来提高性能。

visual foxpro数据库文件是什么visual foxpro数据库文件是什么Jul 23, 2021 pm 04:53 PM

visual foxpro数据库文件是管理数据库对象的系统文件。在VFP中,用户数据是存放在“.DBF”表文件中;VFP的数据库文件(“.DBC”)中不存放用户数据,它只起将属于某一数据库的 数据库表与视图、连接、存储过程等关联起来的作用。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

microsoft sql server是什么软件microsoft sql server是什么软件Feb 28, 2023 pm 03:00 PM

microsoft sql server是Microsoft公司推出的关系型数据库管理系统,是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理,具有使用方便可伸缩性好与相关软件集成程度高等优点。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

go语言可以写数据库么go语言可以写数据库么Jan 06, 2023 am 10:35 AM

go语言可以写数据库。Go语言和其他语言不同的地方是,Go官方没有提供数据库驱动,而是编写了开发数据库驱动的标准接口,开发者可以根据定义的接口来开发相应的数据库驱动;这样做的好处在于,只要是按照标准接口开发的代码,以后迁移数据库时,不需要做任何修改,极大方便了后期的架构调整。

mysql查询慢的因素除了索引,还有什么?mysql查询慢的因素除了索引,还有什么?Jul 19, 2022 pm 08:22 PM

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具