資料庫事務 隔離級別

2021-08-27 16:15:34 字數 1219 閱讀 3267

<1>原子性:事務包含的操作不可分割,要麼全部執行,要麼全部回滾,不存在某一小部分執行成功的情況;

例如:atm機取款的乙個事務操作,你需要 插卡--輸入密碼--取款金額1000--吐出現金1000--卡內餘額會減少1000;取款成功需要每一步全部執行完成,否則全部回滾 事務操作失敗。

<2>一致性事務執行之前和執行之後必須處於一致性狀態,事務執行使得資料庫從一種正確的狀態轉換到另一種正確的狀態;因此資料庫指揮儲存成功提交的事務,如果資料庫故障導致部分資料儲存不成功 就會使資料庫處於一種不一致的狀態(不正確);

例如:a、b兩人共有1000元,兩人相互轉賬, 不管他們怎麼轉 轉了多少次,到最後他們的金額合計還是1000元。

<3>隔離性事務的執行不受其他併發事務的影響。乙個事務內部操作及使用的資料對其他併發事務都是隔離的,併發執行的事務之間都是互不干擾的(事務未正確提交前,不允許把該事務對資料的任何改變提供給任何其他事務);

例如:兩個 事務a上車、事務b下車 可以併發執行,兩個乘客可以同時在這一站上車和下車,而不是說 乙個乘客在這一站下車的話 另乙個乘客就不能上車了,這兩個併發事務上車和下車之間是互不干擾的;

<4>永續性:事務提交後 結果永久性的儲存到資料庫,不會無緣無故的回滾;

由隔離性我們可以看到多執行緒併發操作時,如果不考慮事務的隔離性 可能引發一下問題:

針對於以上的情況 mysql提出了四種隔離級別:

<1>  這四種從1--4級別由高到低,最高的是serializable級別,最低的是read uncommitted級別,當然級別越高,執行效率就越低;

<2>oracle資料庫中,只支援serializable (序列化)級別和read committed (讀已提交)這兩種級別,預設為read committed級別 ;

<3>檢視mysql隔離級別:select @@tx_isolation;

<4>設定mysql隔離級別:set @@tx_isolation;

<5>檢視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...