資料庫事務:資料庫事務是指作為單個邏輯單元執行的一系列操作,這些操作是一組不可分割的工作單位;
事務具有原子性(atomicity),一致性(consistency),隔離性(isolation),永續性(durability);
原子性:事務所包含的操作要麼全部成功,要麼出錯回滾;
一致性:事務必須使資料庫從乙個一致性狀態變到另乙個一致性狀態,例如約束了a+b=10,乙個事務改變了a,那麼b的值隨之變化;
隔離性:多個使用者併發的訪問資料庫時,系統為乙個使用者開啟的事務,不能被其他使用者的事務所干擾;
永續性:提交的事務將永久的改變資料庫;
在多個使用者併發訪問資料庫時,系統就需要對各個事務進行隔離操作,否則容易出現資料不一致的情況,如:
更新丟失:1. 更新丟失:兩個事務同時更新,第二個事務的回滾覆蓋了第乙個事務更新的資料;2. 第二類更新問題:兩個資料都讀取到資料,並同時更新,第乙個事物的更新被第二個事務覆蓋;
髒讀:事務a讀取到事務b還未提交的資料,然後事務b回滾操作,事務a就讀到了髒資料;
不可重複讀:事務a第一次讀取資料之後,事務b修改了資料,事務a再次讀取資料,讀到的值與第一次不一致;
幻讀:事務a讀取範圍資料時,事務b又新增或刪除行,導致事務a讀取到幻影行;
資料庫提供了4種隔離級別,分別是:
讀未提交(read uncommitted):只限制同一資料寫事務禁止其他寫事務,會引發髒讀;
讀提交(read committed):只限制同一資料寫事務禁止其他讀寫事務,解決髒讀、更新丟失,未解決不可重複讀;
可重複讀(repeatable read):限制同一資料寫事務禁止其他讀寫事務,讀事務禁止其它寫事務(允許讀)。解決不可重複讀、更新丟失和髒讀,未解決幻讀,解決幻讀需要增加範圍鎖或表鎖;
序列化( serializable):最嚴格的事務隔離,限制事務乙個接乙個的執行,沒有併發;
資料庫中除了mysql預設為可重複讀,大部分均為讀提交;
參考部落格:
資料庫事務隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...
資料庫事務隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...
資料庫事務隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable 這四個級別可以逐個解決髒讀 不可重複讀 幻讀 這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted re...