如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性:
acid
atomic 原子性:
原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾
consistency 一致性:
一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。
isolation 隔離性
隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。
durability 永續性:
永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。
事務的隔離性:如果不考慮事務的隔離性(事務的併發控制),會發生以下幾種問題:
髒讀:乙個事務讀取了另乙個未提交的事務的資料;
不可重複讀:多次查詢返回不同數值,說明在查詢間隔,資料被另乙個事務修改並提交;
幻影讀:例如第乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。
不可重複讀的重點是修改;幻讀的重點在於新增或者刪除
幻影讀和不可重複讀都是讀取了另一條已經提交的事務,但是幻影讀針對的是一批資料。
第一類丟失更新(update lost):此種更新丟失是因為回滾的原因,所以也叫回滾丟失。此時兩個事務同時更新count,兩個事務都讀取到100,事務一更新成功並提交,count=100+1=101,事務二出於某種原因更新失敗了,然後回滾,事務二就把count還原為它一開始讀到的100,此時事務一的更新就這樣丟失了。
第二類丟失更新(second update lost):此種更新丟失是因為更新被其他事務給覆蓋了,也可以叫覆蓋丟失。舉個例子,兩個事務同時更新count,都讀取100這個初始值,事務一先更新成功並提交,count=100+1=101,事務二后更新成功並提交,count=100+1=101,由於事務二count還是從100開始增加,事務一的更新就這樣丟失了。
現在來看看mysql資料庫為我們提供的四種隔離級別(從高到低):級別越高,執行效率就越低
① serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。
② repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
③ read committed (讀已提交):可避免髒讀的發生。
④ read uncommitted (讀未提交):最低級別,任何情況都無法保證。
在mysql中設定隔離級別和檢視
在mysql資料庫中檢視當前事務的隔離級別:
select @@tx_isolation;
在mysql資料庫中設定事務的隔離 級別:
set [glogal | session] transaction isolation level 隔離級別名稱;
set tx_isolation=』隔離級別名稱;』
部分**: 資料庫事務的四大特性(ACID)以及事務的隔離級別
1 原子性 乙個事務裡面的所有資料操作是不可分割的,要麼所有的操作全部成功,要麼所有的操作全部失敗。2 一致性 事務執行前後資料庫的狀態都是一致的,不管事務執行結果是失敗還是成功,資料庫的前後狀態都是一致的。3 隔離性 併發訪問的時候,乙個事務不能干擾另乙個事務 多個併發事務之間相互隔離。4 永續性...
資料庫事務的四大特性以及事務的隔離級別
本篇講訴資料庫中事務的四大特性 acid 並且將會詳細地說明事務的隔離級別。如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,...
資料庫事務的四大特性
事務的 原子性 一致性 分離性 永續性 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執...