商城網(wǎng)站怎么做推廣網(wǎng)站廣告調(diào)詞軟件
一、介紹:
1、介紹:
在計(jì)算機(jī)術(shù)語(yǔ)中,事務(wù)(Transaction)是訪問(wèn)并可能更新數(shù)據(jù)庫(kù)中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。事務(wù)是恢復(fù)和并發(fā)控制的基本單位。
2、事務(wù)的4大特性
原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱為ACID特性。
2.1、原子性(Atomicity):
事務(wù)是一個(gè)原子操作,它要么全部成功,要么全部失敗回滾。如果事務(wù)中的任何操作失敗,則所有操作都將回滾到之前的狀態(tài),以確保數(shù)據(jù)庫(kù)中的數(shù)據(jù)不會(huì)被部分更改。
2.2、一致性(Consistency):
事務(wù)的執(zhí)行必須使數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)換到另一個(gè)一致?tīng)顟B(tài)。這意味著事務(wù)必須滿足所有約束條件,以保持?jǐn)?shù)據(jù)的完整性和一致性。
2.3、隔離性(Isolation):
并發(fā)事務(wù)的執(zhí)行不能相互干擾。事務(wù)必須在獨(dú)立的空間內(nèi)執(zhí)行,這意味著它們看起來(lái)像是在獨(dú)占訪問(wèn)數(shù)據(jù)庫(kù)。
2.4、持久性(Durability):
一旦事務(wù)完成提交,其結(jié)果就是永久性的,并且即使在系統(tǒng)故障的情況下,也必須能夠恢復(fù)這些結(jié)果。
注意,在firebird中,開(kāi)啟事務(wù)的方式是讓調(diào)用程序使用StartTransaction(開(kāi)啟事務(wù))、COMMIT(提交事務(wù))和ROLLBACK(撤銷事務(wù))。
3、并發(fā)事務(wù)遇到問(wèn)題:
(1)贓讀:一個(gè)事務(wù)讀到另外一個(gè)事務(wù)還沒(méi)有提交的數(shù)據(jù)。
(2)不可重復(fù)讀:一個(gè)事務(wù)先后讀取同一條記錄,但兩次讀取的數(shù)據(jù)不同,稱之為不可重復(fù)讀。
(3)幻讀:一個(gè)事務(wù)按照條件查詢數(shù)據(jù)時(shí),沒(méi)有對(duì)應(yīng)的數(shù)據(jù)行,但是在插入數(shù)據(jù)時(shí),又發(fā)現(xiàn)這行數(shù)據(jù)已經(jīng)存在,好像出現(xiàn)了 "幻影"。
二、事務(wù)隔離級(jí)別
1、四種隔離級(jí)別
?為了解決并發(fā)事務(wù)所引發(fā)的問(wèn)題,在數(shù)據(jù)庫(kù)中引入了事務(wù)隔離級(jí)別。主要有以下幾種:(Serializable安全性最高,Uncommitted安全性最差)
之所以默認(rèn)下第三個(gè),是因?yàn)槭聞?wù)隔離級(jí)別越高,數(shù)據(jù)越安全,但是性能越低。
(1)查看事務(wù)隔離級(jí)別
SELECT @@TRANSACTION_ISOLATION;
(2)設(shè)置事務(wù)隔離級(jí)別
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }?
2、mysql保障事務(wù)四大特性
2.1、原子性、一致性、持久化
實(shí)際上是由InnoDB中的兩份日志來(lái)保證的,一份是redo log日志,一份是undo log日志。
(1)redo log:重做日志,負(fù)責(zé)記錄的是事務(wù)提交時(shí)數(shù)據(jù)頁(yè)的物理修改,即哪一頁(yè)哪一行哪個(gè)字段做了什么修改。當(dāng)數(shù)據(jù)庫(kù)發(fā)生故障時(shí),redo log可以用來(lái)恢復(fù)未完成的事務(wù),實(shí)現(xiàn)事務(wù)的持久性。分為重做日志緩沖(redo log buffer)以及重做日志文件(redo log file),前者是在內(nèi)存中,后者在磁盤中。
(2)undo log:回滾日志,主要作用是在事務(wù)進(jìn)行修改操作但還未提交之前,先記錄下原始的數(shù)據(jù)狀態(tài)。這樣,當(dāng)事務(wù)因?yàn)槟承┰蛐枰貪L或數(shù)據(jù)庫(kù)發(fā)生故障時(shí),可以利用undo log中的信息將數(shù)據(jù)恢復(fù)到事務(wù)開(kāi)始前的狀態(tài)。 作用包含兩個(gè) : 提供回滾(保證事務(wù)的原子性) 和MVCC(多版本并發(fā)控制) 。
(3)MVCC :全稱 Multi-Version Concurrency Control,多版本并發(fā)控制。指維護(hù)一個(gè)數(shù)據(jù)的多個(gè)版本,使得讀寫操作沒(méi)有沖突,快照讀為MySQL實(shí)現(xiàn)MVCC提供了一個(gè)非阻塞讀功能。MVCC的具體實(shí)現(xiàn),還需要依賴于數(shù)據(jù)庫(kù)記錄中的三個(gè)隱式字段、undo log日志、readView。
注:隱式字段:我們創(chuàng)建表(id,name,age)后,插入數(shù)據(jù)時(shí),InnoDB還會(huì)自動(dòng)的給我們添加三個(gè)隱藏字段,前兩個(gè)字段是肯定會(huì)添加的, 是否添加最后一個(gè)字段DB_ROW_ID,得看當(dāng)前表有沒(méi)有主鍵,如果有主鍵,則不會(huì)添加該隱藏字段。
2.2、持久性:
是通過(guò)數(shù)據(jù)庫(kù)的鎖,加上MVCC來(lái)保證的。