对事务的特性ACID的理解
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 對(duì)事務(wù)的特性ACID的理解
數(shù)據(jù)庫(kù)的事務(wù)必須具備ACID特性,ACID是指 Atomicity(原子性)、Consistensy(一致性)、Isolation(隔離型)和Durability(持久性)的英文縮寫(xiě)。
?
1、原子性(Atomicity)
事務(wù)包裝的一組sql,要么都執(zhí)行成功,要么都失敗。這些操作是不可分割的。
2、一致性(Consistency)
??????? 數(shù)據(jù)庫(kù)的數(shù)據(jù)狀態(tài)是一致的。
事務(wù)的成功與失敗,最終數(shù)據(jù)庫(kù)的數(shù)據(jù)都是符合實(shí)際生活的業(yè)務(wù)邏輯。一致性絕大多數(shù)依賴(lài)業(yè)務(wù)邏輯和原子性。
3、持久性:(Durability)
事務(wù)成功提交之后,對(duì)于數(shù)據(jù)庫(kù)的改變是永久的。哪怕數(shù)據(jù)庫(kù)發(fā)生異常,重啟之后數(shù)據(jù)亦然存在。
4、隔離性(Isolation)
??????? 一個(gè)事務(wù)的成功或者失敗對(duì)于其他的事務(wù)是沒(méi)有影響。2個(gè)事務(wù)應(yīng)該相互獨(dú)立。
?
事務(wù)的隔離級(jí)別
如果不考慮事務(wù)的隔離性,由于事務(wù)的并發(fā),將會(huì)出現(xiàn)以下問(wèn)題:
1、臟讀 -- 最嚴(yán)重,杜絕發(fā)生
2、不可重復(fù)讀
3、幻讀(虛讀)
?臟讀:指一個(gè)事務(wù)讀取了另外一個(gè)事務(wù) 未提交的數(shù)據(jù)。
? ? ? ? ? 一個(gè)事務(wù)讀取了另一個(gè)事務(wù)沒(méi)有提交的數(shù)據(jù),非常嚴(yán)重。應(yīng)當(dāng)盡量避免臟讀。
?
?不可重復(fù)讀:在一個(gè)事務(wù)內(nèi)多次讀取表中的數(shù)據(jù),多次讀取的結(jié)果不同。
?
? 幻讀(虛讀)
?
?
?
?隔離級(jí)別:如何解決問(wèn)題
?
l? 數(shù)據(jù)庫(kù)規(guī)范規(guī)定了4種隔離級(jí)別,分別用于描述兩個(gè)事務(wù)并發(fā)的所有情況。
a)?????? 存在:3個(gè)問(wèn)題(臟讀、不可重復(fù)讀、虛讀)。
b)?????? 解決:0個(gè)問(wèn)題
a)?????? 存在:2個(gè)問(wèn)題(不可重復(fù)讀、虛讀)。
b)?????? 解決:1個(gè)問(wèn)題(臟讀)
a)?????? 存在:1個(gè)問(wèn)題(虛讀)。
b)?????? 解決:2個(gè)問(wèn)題(臟讀、不可重復(fù)讀)
a)?????? 存在:0個(gè)問(wèn)題。
b)?????? 解決:3個(gè)問(wèn)題(臟讀、不可重復(fù)讀、虛讀)
?安全和性能對(duì)比
? ? ? 安全性:serializable > repeatable read > read committed > read uncommitted
? ?性能 : serializable < repeatable read < read committed < read uncommitted
常見(jiàn)數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別:
? MySql:repeatable read
Oracle:read committed
?
? 演示
?查詢(xún)數(shù)據(jù)庫(kù)的隔離級(jí)別
show variables like '%isolation%'; 或 select @@tx_isolation;設(shè)置數(shù)據(jù)庫(kù)的隔離級(jí)別
set session transaction isolation level 級(jí)別字符串
?級(jí)別字符串:read uncommitted、read committed、repeatable read、serializable
? 例如:set session transaction isolation level read uncommitted;
?
? 讀未提交:read uncommitted ? A窗口設(shè)置隔離級(jí)別 ? AB同時(shí)開(kāi)始事務(wù) ? A 查詢(xún) ? B 更新,但不提交 ? A 再查詢(xún)?-- 查詢(xún)到了未提交的數(shù)據(jù) ? B 回滾 ? A 再查詢(xún)?-- 查詢(xún)到事務(wù)開(kāi)始前數(shù)據(jù)? 讀已提交:read committed ? A窗口設(shè)置隔離級(jí)別 ? AB同時(shí)開(kāi)啟事務(wù) ? A查詢(xún) ? B更新、但不提交 ? A再查詢(xún)?--數(shù)據(jù)不變,解決問(wèn)題【臟讀】 ? B提交 ? A再查詢(xún)?--數(shù)據(jù)改變,存在問(wèn)題【不可重復(fù)讀】? 可重復(fù)讀:repeatable read ? A窗口設(shè)置隔離級(jí)別 ? AB 同時(shí)開(kāi)啟事務(wù) ? A查詢(xún) ? B更新, 但不提交 ? A再查詢(xún)?--數(shù)據(jù)不變,解決問(wèn)題【臟讀】 ? B提交 ? A再查詢(xún)?--數(shù)據(jù)不變,解決問(wèn)題【不可重復(fù)讀】 ? A提交或回滾 ? A再查詢(xún)?--數(shù)據(jù)改變,另一個(gè)事務(wù)? 串行化:serializable ? A窗口設(shè)置隔離級(jí)別 ? AB同時(shí)開(kāi)啟事務(wù) ? A查詢(xún) ? B更新?--等待(如果A沒(méi)有進(jìn)一步操作,B將等待超時(shí)) ? A回滾 ? B 窗口?--等待結(jié)束,可以進(jìn)行操作
轉(zhuǎn)載于:https://www.cnblogs.com/daiwei1981/p/9338420.html
總結(jié)
以上是生活随笔為你收集整理的对事务的特性ACID的理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 掌上生活app
- 下一篇: lucene 第一天