事務(transaction)是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。事務通常是以begin transaction開始,以commit或rollback結束。
commit表示提交,即提交事務的所有操作。具體地說就是將事務中所有對資料庫的更新寫回到磁碟上的物理資料庫中去,事務正常結束。
rollback表示回滾,即在事務執行的過程中發生了某種故障,事務不能繼續進行,系統將事務中對資料庫的所有以完成的操作全部撤消,滾回到事務開始的狀態。
事務的四個特性(acid特性)
a:原子性(atomicity)
事務是資料庫的邏輯工作單位,事務中包括的諸操作要麼全做,要麼全不做。
b:一致性(consistency)
事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。一致性與原子性是密切相關的。
c:隔離性(isolation)
乙個事務的執行不能被其他事務干擾。
d:持續性/永久性(durability)
乙個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。
乙個事務中,可以包含多個操作,這多個操作是乙個整體,要麼全部執行成功,要麼全部執行失敗!白話來說,事務中所有操作同生共死.
資料庫事務的隔離級別有4個,由低到高依次為隔離級別read uncommitted(未提交讀)
、read committed(提交讀)
、repeatable read(重複)
、serializable
髒讀(dirty
read)
不可重複讀(non-repeatable read)
幻讀(phantom read)
read_uncommited
允許允許
允許read_commited
不允許允許
允許repeatable_read
不允許不允許
允許serializble
不允許不允許
不允許
髒讀:髒讀指的是乙個事務允許讀取其他正在執行的事務還沒有提交的改變。這種情況的發生主要因為沒有加鎖。
不可重複讀:
不可重複讀是指事務a讀取了事務b已經提交的更改資料。不可重複讀指的是乙個事務內連續讀卻得到不同的結果,主要因為同時有其他事務更新了我們正在讀取的資料。要達到允許可重複讀的目的,我們必須讓當前事務保持乙個讀共享鎖。
幻讀:幻讀指的是事務不是序列發生時發生的一種現象,是事務a讀取了事務b已提交的新增資料。例如第乙個事務對乙個表的所有資料進行修改,同時第二個事務向表中插入一條新資料。那麼操作第乙個事務的使用者就發現表中還有沒有修改的資料行,就像發生了幻覺一樣。解決幻讀的方法是增加範圍鎖(range lock)或者表鎖。四種事務隔離級別中只有serializable能夠解決幻讀。
四種事務隔離級別中只有serializable能夠解決幻讀。
mysql的預設事務隔離級別是repeatable_read,oracle、sql server、db2和postgresql的預設事務隔離級別是read_commited。
ORACLE相關內容
1 em,dbca,netca,netmgr出現亂碼方案 cd oracle home jre lib mv font.properties font.properties.bak mv font.properties.zh font.properties em,dbca,netca,netmgr詳...
JVM相關內容
本地 native code 每個因素對記憶體占用的影響又會隨著應用程式 執行環境和系統平台的不同而變化,那怎樣計算總的記憶體佔用量?是的,想得到乙個準確的數字不是那麼容易,因為 你很難控制本地 native 部分。你能控制的部分只有堆大小 xmx,類占用的記憶體 xx maxpermsize,還有...
指標相關內容
1.指標是變數,佔4位元組,存放的是位址 2.指標型別與零值比較 if n null 或者if n null 3.野指標 int p 空指標 int p null 避免野指標 以char型別為例 char p char mallloc sizeof char 10 要包含標頭檔案 include 使...