資料庫中的-髒讀,幻讀,不可重複讀
資料庫帶來的併發問題包括:
1.丟失或覆蓋更新。(幻像讀)
2.未確認的相關性(髒讀)。
3.不一致的分析(非重複讀)。
詳細描述如下:
一.丟失更新
當兩個或多個事務選擇同一行,然後基於最初選定的值更新該行時,會發生丟失更新問題。每個事務都不知道其它事務的存在。最後的更新將重寫由其它事務所做的更新,這將導致資料丟失。
e.g.事務A和事務B同時修改某行的值,
1.事務A將數值改為1並提交
2.事務B將數值改為2並提交。
這時資料的值為2,事務A所做的更新將會丟失。
解決辦法:對行加鎖,只允許併發一個更新事務。
二.未確認的相關性(髒讀)
當第二個事務選擇其它事務正在更新的行時,會發生未確認的相關性問題。第二個事務正在讀取的資料還沒有確認並且可能由更新此行的事務所更改。
e.g.
1.Mary的原工資為1000, 財務人員將Mary的工資改為了8000(但未提交事務)
2.Mary讀取自己的工資 ,發現自己的工資變為了8000,歡天喜地!
3.而財務發現操作有誤,回滾了事務,Mary的工資又變為了1000
像這樣,Mary記取的工資數8000是一個髒資料。
解決辦法:如果在第一個事務提交前,任何其他事務不可讀取其修改過的值,則可 以避免該問題。
三.不一致的分析(非重複讀)
當第二個事務多次訪問同一行而且每次讀取不同的資料時,會發生不一致的分析問題。不一致的分析與未確認的相關性類似,因為其它事務也是正在更改第二個事務正在讀取的資料。然而,在不一致的分析中,第二個事務讀取的資料是由已進行了更改的事務提交的。而且,不一致的分析涉及多次(兩次或更多)讀取同一行,而且每次資訊都由其它事務更改;因而該行被非重複讀取。
在一個事務中前後兩次讀取的結果並不致,導致了不可重複讀。
e.g.
1.在事務1中,Mary 讀取了自己的工資為1000,操作並沒有完成
2.在事務2中,這時財務人員修改了Mary的工資為2000,並提交了事務.
3.在事務1中,Mary 再次讀取自己的工資時,工資變為了2000
解決辦法:如果只有在修改事務完全提交之後才可以讀取資料,則可以避免該問題。
四.幻想讀
當對某行執行插入或刪除操作,而該行屬於某個事務正在讀取的行的範圍時,會發生幻像讀問題。事務第一次讀的行範圍顯示出其中一行已不復存在於第二次讀或後續讀中,因為該行已被其它事務刪除。同樣,由於其它事務的插入操作,事務的第二次或後續讀顯示有一行已不存在於原始讀中。
e.g.目前工資為1000的員工有10人。
1.事務1,讀取所有工資為1000的員工。
2.這時事務2向employee表插入了一條員工記錄,工資也為1000
3.事務1再次讀取所有工資為1000的員工 共讀取到了11條記錄,
解決辦法:如果在操作事務完成資料處理之前,任何其他事務都不可以新增新資料,則可避免該問題
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23071790/viewspace-734086/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 髒讀,幻讀,不可重複讀
- 【Mysql】資料庫事務,髒讀、幻讀、不可重複讀MySql資料庫
- 髒讀、不可重複讀、幻讀區別
- 資料庫事務隔離級別– 髒讀、幻讀、不可重複讀資料庫
- 一文詳解髒讀、不可重複讀、幻讀
- 事務四大特性理解,什麼是髒資料、髒讀、不可重複讀、幻覺讀
- MySQL 事務隔離實驗-認識:髒讀、不可重複讀、幻讀MySql
- 髒讀!幻讀!不可重複讀!mysql併發事務引發的問題MySql
- 簡單聊聊mysql的髒讀、不可重複讀MySql
- 關於事務、事務的隔離級別以及對髒讀、不可重複讀、幻讀的理解
- MySQL事務(4種事務隔離級別、髒寫、髒讀、不可重複讀、幻讀、當前讀、快照讀、MVCC、事務指標監控)MySqlMVC指標
- 【MySQL】可重複讀下的幻讀MySql
- 【每日鮮蘑】資料庫隔離級別、髒讀、幻讀、鎖等資料庫
- MySQL的可重複讀級別能解決幻讀嗎MySql
- Mysql RC/RR隔離原理和區別 不可重複讀和可重複讀MySql
- 使用Sqlserver更新鎖防止資料髒讀SQLServer
- 參考oracle官方文件關於髒讀、一致性讀、undo中已提交資料塊的理解Oracle
- 資料庫的讀寫分離資料庫
- EXCEL不可讀怎麼辦,修復EXCEL檔案不可讀Excel
- 從Data Buffer中讀資料是單塊讀,還是多塊讀?
- 資料庫規約解讀資料庫
- 資料庫讀寫分離資料庫
- Kettle 從資料庫讀取資料存到變數中資料庫變數
- 利用反射讀取資料庫資料反射資料庫
- sqlserver讀取oracle資料庫資料SQLServerOracle資料庫
- PG 裡面的只讀使用者,只讀資料庫資料庫
- Entity Framework with nolock. 允許髒讀Framework
- MySQL 之隔離級別:可重複讀MySql
- 資料庫的讀現象淺析資料庫
- InnoDB 是如何解決幻讀的
- 重讀 JVMJVM
- /etc/hosts檔案不可讀導致10.2.0.3資料庫不能起來資料庫
- php 讀取excel中的內容到mysql 資料庫PHPExcelMySql資料庫
- 如何限制從資料庫中讀出圖片的大小資料庫
- EasyExcel庫來讀取指定Excel檔案中的資料Excel
- eazyexcel 讀取excel資料插入資料庫Excel資料庫
- Laravel 文件閱讀:資料庫起步Laravel資料庫
- Mysql可重複讀(1) —— 快照何時建立MySql