作為單個邏輯工作單元執行的一系列操作,要麼全都執行,要麼全都不執行。
而乙個邏輯工作單元要成為事務,必須滿足acid特性。
a(atomicity)
原子性:事務中的特性要麼不做,要麼全做。
c(consistency)
一致性:事務執行的結果必須是從資料庫從乙個一致性狀態轉換到另乙個一致性狀態。
i(isolation)
隔離性:乙個事務的執行不能被其它事務干擾。
d(durability)
永續性:乙個事務一旦提交,它對資料庫中資料的改變應該是永久的。
1.讀未提交(read uncommitted)引發髒讀(讀取了未提交的資料)
2.讀已提交(read committed)
這是大多數資料庫系統預設的隔離級別,但不是mysql預設的
只能看見已經提交事務所做的改變
引發不可重複讀,不可重讀讀意味著我們同一事務執行完全相同的select語句時可能看到不一樣的結果。
——>導致這種情況的原因可能有:(1)有乙個交叉的事務有新的commit,導致了資料的改變;(2)乙個資料庫被多個例項操作時,同一事務的其他例項在該例項處理其間可能會有新的commit
多個commit提交時,唯讀一次出現結果不一致
4.可序列化(serializable)3.可重複讀(repeatable read)
這是mysql的預設事務隔離級別
它確保同一事務的多個例項在併發讀取資料時,看到同樣的資料行
此級別可能出現的問題--幻讀(phantom read),當使用者讀取某一範圍的資料行時,另乙個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的「幻影」 行
innodb和falcon儲存引擎通過多版本併發控制(mvcc,multiversion concurrency control)機制解決了該問題
這是最高的隔離級別
它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它在每個讀的資料行上加上共享鎖。
可能導致大量的超時現象和鎖競爭
oracle 對資料庫事務的理解
事務控制命令只與dml命令 insert update delete配合使用,比如我們不會在建立表之後使用commit語句,因為當表被建立後,它會自動被提交給資料庫。也不能使用rollback語句來恢復被撤銷的表。此外,還有其他類似的語句,也不能被撤銷,例如truncate語句。所以,在執行新的命令...
資料庫事務總結
資料庫併發訪問會出現以下4種問題 1 第一類丟失更新 事務b巢狀在事務a中,事務b已經更新,之後事務a更新失敗,a回滾,丟失了b的更新。支援事務的資料庫不會出現此問題 2 髒讀 讀到其他事務還未提交的資料。3 不可重複讀 在同一事務中,兩次讀取的資料不一致。被其他事務修改了 4 幻讀 兩次讀取的記錄...
資料庫事務的總結
用一句話簡單的說明 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作 對資料庫的相關增刪改查的操作 要麼完全地執行,要麼完全地不執行。資料庫的四大特性acid,原子性 一致性 隔離性 永續性。每個特性都有其特定的職責。2.1 原子性 乙個事務中的所有操作...