日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql四种事务级别_【MySQL 知识】四种事务隔离级别

發(fā)布時(shí)間:2025/3/15 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql四种事务级别_【MySQL 知识】四种事务隔离级别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:本篇文章主要是為了對(duì)MySQL的四種事務(wù)隔離級(jí)別的介紹。為了保證數(shù)據(jù)庫的正確性與一致性,數(shù)據(jù)庫事務(wù)具有原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。事務(wù)的四種隔離級(jí)別根據(jù)隔離級(jí)別由低到高分別為讀未提交(READ_UNCOMMITTED)、讀已提交(READ_COMMITTED)、可重復(fù)讀(REPEATABLE_READ)、串行化(SERIALIZABLE)。串行化事物隔離級(jí)別可以做到事務(wù) 100% 隔離,可避免臟讀、不可重復(fù)讀、幻讀的發(fā)生,但是對(duì)并發(fā)性能的影響也是最大的。

一、事務(wù)的基礎(chǔ)概念

根據(jù)維基百科的定義,數(shù)據(jù)庫事務(wù)(簡稱:事務(wù))是數(shù)據(jù)庫管理系統(tǒng)DBMS(Database Management System)執(zhí)行過程中的一個(gè)邏輯單位,由一個(gè)有限的數(shù)據(jù)庫操作序列構(gòu)成。

簡單來講,事務(wù)是用戶定義的一系列有限的數(shù)據(jù)庫操作,這些操作可以視為一個(gè)完整的邏輯處理工作單元,要么全部執(zhí)行,要么全部不執(zhí)行,是不可分割的工作單元。

例如,在關(guān)系數(shù)據(jù)庫中,一個(gè)事務(wù)可以是一條SQL語句、一組SQL語句或整個(gè)程序。事務(wù)和程序是兩個(gè)概念。一般地講,一個(gè)程序中包含多個(gè)事務(wù)。事務(wù)的開始與結(jié)束可以由用戶顯式控制。如果用戶沒有顯式地定義事務(wù),則由DBMS按缺省規(guī)定自動(dòng)劃分事務(wù)。

數(shù)據(jù)庫事務(wù)的使用:

BEGIN TRANSACTION – 開始事務(wù),事務(wù)開始保存點(diǎn)

ROLLBACK TRANSACTION – 回滾事務(wù),由于出現(xiàn)錯(cuò)誤,回滾數(shù)據(jù)到事務(wù)開始之前

COMMIT TRANSACTION – 提交事務(wù),保存數(shù)據(jù)到數(shù)據(jù)庫中

數(shù)據(jù)庫事務(wù)的目的:

為數(shù)據(jù)庫操作提供了一個(gè)從失敗中恢復(fù)到正常狀態(tài)的方法,同時(shí)提供了數(shù)據(jù)庫即使在異常狀態(tài)下仍能保持一致性的方法。

當(dāng)多個(gè)應(yīng)用程序在并發(fā)訪問數(shù)據(jù)庫時(shí),可以在這些應(yīng)用程序之間提供一個(gè)隔離方法,以防止彼此的操作互相干擾或者返回不準(zhǔn)確的結(jié)果。必須保證事務(wù)之間獨(dú)立運(yùn)行,互不影響。

二、事務(wù)的基本要素(ACID)

并非任意對(duì)數(shù)據(jù)庫的操作序列都是數(shù)據(jù)庫事務(wù)。為了保證數(shù)據(jù)庫的正確性與一致性,數(shù)據(jù)庫事務(wù)必須具有以下四個(gè)特性(ACID):

原子性(Atomicity):事務(wù)的原子性保證事務(wù)中包含的一組更新操作是原子的,不可分割的,不可分割是事務(wù)最小的工作單位,所包含的操作被視為一個(gè)整體,執(zhí)行過程中遵循要么全部執(zhí)行,要不都不執(zhí)行,不存在一半執(zhí)行,一半未執(zhí)行的情況。

一致性(Consistency):事務(wù)必須滿足數(shù)據(jù)庫的完整性約束,且事務(wù)執(zhí)行完畢后會(huì)將數(shù)據(jù)庫由一個(gè)一致性的狀態(tài)變?yōu)榱硪粋€(gè)一致性的狀態(tài)。事務(wù)的一致性與原子性是密不可分的,如銀行轉(zhuǎn)賬的例子 A賬戶向B賬戶轉(zhuǎn)1000元錢,首先A賬戶減去1000元錢,然后B賬戶增加1000元錢,這兩動(dòng)作是一個(gè)整體,失去任何一個(gè)操作數(shù)據(jù)的一致性狀態(tài)都會(huì)遭到破壞,所以這兩個(gè)動(dòng)作是一個(gè)整體,要么全部操作,要么都不執(zhí)行,可見事務(wù)的一致性與原子性息息相關(guān)。

隔離性(Isolation):事務(wù)的隔離性要求事務(wù)之間是彼此獨(dú)立的、隔離的。即多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),一個(gè)事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行。具體到操作是指一個(gè)事務(wù)的操作必須在一個(gè)事務(wù)commit之后才可以進(jìn)行操作。多事務(wù)并發(fā)執(zhí)行時(shí),相當(dāng)于將并發(fā)事務(wù)變成串行事務(wù),順序執(zhí)行,如同串行調(diào)度般的執(zhí)行事務(wù)。這里事務(wù)通過鎖機(jī)制來保證它的可串行化。

持久性(Durability):事務(wù)的持久性,是指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫的改變將是永久性的,數(shù)據(jù)一旦寫進(jìn)了物理磁盤,其他操作將不會(huì)對(duì)它產(chǎn)生任何影響。即已被提交的事務(wù)對(duì)數(shù)據(jù)庫的修改應(yīng)該永久保存在數(shù)據(jù)庫中。

三、事務(wù)的并發(fā)問題

不同的事務(wù)隔離級(jí)別狀態(tài)下,會(huì)對(duì)數(shù)據(jù)庫的數(shù)據(jù)產(chǎn)生以下幾種影響:

臟讀:事務(wù) A 讀取了事務(wù) B 更新的數(shù)據(jù),然后 B 回滾操作,那么 A 讀取到的數(shù)據(jù)是臟數(shù)據(jù)。

不可重復(fù)讀:事務(wù) A 多次讀取同一數(shù)據(jù),事務(wù) B 在事務(wù) A 多次讀取的過程中,對(duì)數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù) A 多次讀取同一數(shù)據(jù)時(shí),結(jié)果不一致。

幻讀:系統(tǒng)管理員 A 將數(shù)據(jù)庫中所有學(xué)生的成績從具體分?jǐn)?shù)改為 ABCDE 等級(jí),但是系統(tǒng)管理員 B 就在這個(gè)時(shí)候插入了一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員 A 改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣

四、事務(wù)的四種隔離級(jí)別

讀未提(READ_UNCOMMITTED):一個(gè)事務(wù)還沒提交時(shí),它做的變更就能被別的事務(wù)看到。最低的事務(wù)隔離級(jí)別,任何情況都無法保證。

讀已提交(READ_COMMITTED):保證一個(gè)事物提交后才能被另外一個(gè)事務(wù)讀取,另外一個(gè)事務(wù)不能讀取該事物未提交的數(shù)據(jù)。可避免臟讀的發(fā)生,但是可能會(huì)造成不可重復(fù)讀。

可重復(fù)讀(REPEATABLE_READ):多次讀取同一范圍的數(shù)據(jù)會(huì)返回第一次查詢的快照,即使其他事務(wù)對(duì)該數(shù)據(jù)做了更新修改。事務(wù)在執(zhí)行期間看到的數(shù)據(jù)前后必須是一致的。但如果這個(gè)事務(wù)在讀取某個(gè)范圍內(nèi)的記錄時(shí),其他事務(wù)又在該范圍內(nèi)插入了新的記錄,當(dāng)之前的事務(wù)再次讀取該范圍的記錄時(shí),會(huì)產(chǎn)生幻行,這就是幻讀。

串行化(SERIALIZABLE):寫會(huì)加寫鎖,讀會(huì)加讀鎖。當(dāng)出現(xiàn)讀寫鎖沖突的時(shí)候,后訪問的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成,才能繼續(xù)執(zhí)行。這是最高的事務(wù)隔離級(jí)別,也是最可靠的級(jí)別,但是花費(fèi)的代價(jià)也是最高的。該事物隔離級(jí)別可以做到事務(wù) 100% 隔離,可避免臟讀、不可重復(fù)讀、幻讀的發(fā)生。

事務(wù)隔離級(jí)別

英文

臟讀

不可重復(fù)讀

幻讀

讀未提交

READ_UNCOMMITTED

讀已提交(Oracle)

READ_COMMITTED

x

可重復(fù)讀(MySQL)

REPEATABLE_READ

x

x

序列化讀(串行化)

SERIALIZABLE

x

x

x

MySQL默認(rèn)事務(wù)隔離級(jí)別是可重復(fù)讀(REPEATABLE_READ);Oracle 默認(rèn)事務(wù)隔離級(jí)別是讀已提交(READ_COMMITTED)。

從上面可以看出,隔離級(jí)別越高,越能保證數(shù)據(jù)的完整性和一致性,但是對(duì)并發(fā)性能的影響也越大。

總結(jié)

以上是生活随笔為你收集整理的mysql四种事务级别_【MySQL 知识】四种事务隔离级别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。