資料庫併發問題
如果沒有鎖定且多個使用者同時訪問一個資料庫,則當他們的事務同時使用相同的資料時可能會發生問題。併發問題包括:
丟失更新
當兩個或多個事務選擇同一行,然後基於最初選定的值更新該行時,會發生丟失更新問題。每個事務都不知道其它事務的存在。最後的更新將重寫由其它事務所做的更新,這將導致資料丟失。
例如,兩個編輯人員製作了同一文件的電子複本。每個編輯人員獨立地更改其複本,然後儲存更改後的複本,這樣就覆蓋了原始文件。最後儲存其更改複本的編輯人員覆蓋了第一個編輯人員所做的更改。如果在第一個編輯人員完成之後第二個編輯人員才能進行更改,則可以避免該問題。
未確認的相關性(髒讀)
當第二個事務選擇其它事務正在更新的行時,會發生未確認的相關性問題。第二個事務正在讀取的資料還沒有確認並且可能由更新此行的事務所更改。
例如,一個編輯人員正在更改電子文件。在更改過程中,另一個編輯人員複製了該文件(該複本包含到目前為止所做的全部更改)並將其分發給預期的使用者。此後,第一個編輯人員認為目前所做的更改是錯誤的,於是刪除了所做的編輯並儲存了文件。分發給使用者的文件包含不再存在的編輯內容,並且這些編輯內容應認為從未存在過。如果在第一個編輯人員確定最終更改前任何人都不能讀取更改的文件,則可以避免該問題。
不一致的分析(非重複讀)
當第二個事務多次訪問同一行而且每次讀取不同的資料時,會發生不一致的分析問題。不一致的分析與未確認的相關性類似,因為其它事務也是正在更改第二個事務正在讀取的資料。然而,在不一致的分析中,第二個事務讀取的資料是由已進行了更改的事務提交的。而且,不一致的分析涉及多次(兩次或更多)讀取同一行,而且每次資訊都由其它事務更改;因而該行被非重複讀取。
例如,一個編輯人員兩次讀取同一文件,但在兩次讀取之間,作者重寫了該文件。當編輯人員第二次讀取文件時,文件已更改。原始讀取不可重複。如果只有在作者全部完成編寫後編輯人員才可以讀取文件,則可以避免該問題。
幻像讀
當對某行執行插入或刪除操作,而該行屬於某個事務正在讀取的行的範圍時,會發生幻像讀問題。事務第一次讀的行範圍顯示出其中一行已不復存在於第二次讀或後續讀中,因為該行已被其它事務刪除。同樣,由於其它事務的插入操作,事務的第二次或後續讀顯示有一行已不存在於原始讀中。
例如,一個編輯人員更改作者提交的文件,但當生產部門將其更改內容合併到該文件的主複本時,發現作者已將未編輯的新材料新增到該文件中。如果在編輯人員和生產部門完成對原始文件的處理之前,任何人都不能將新材料新增到文件中,則可以避免該問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/310974/viewspace-987032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 求助:資料庫併發訪問問題資料庫
- 併發查詢資料庫問題資料庫
- 資料併發問題收藏
- 解決資料庫高併發訪問瓶頸問題資料庫
- 使用資料庫處理併發可能導致的問題資料庫
- 資料庫之事務、隔離級別和併發問題資料庫
- Android中Sqlite資料庫多執行緒併發問題AndroidSQLite資料庫執行緒
- 請教資料庫併發訪問的問題!望各位大蝦指點!資料庫
- 資料庫併發寫入問題-丟失更新與寫入偏差資料庫
- 【資料庫】併發控制資料庫
- 資料編號+1 併發問題解決
- 資料庫事務 ACID屬性、資料庫併發問題和四種隔離級別資料庫
- [分散式]高併發案例---庫存超發問題分散式
- 資料庫事務併發問題----各種事務隔離下的情況資料庫
- 【眼見為實】資料庫併發問題 封鎖協議 隔離級別資料庫協議
- oracle併發問題Oracle
- 資料庫同步問題資料庫
- 請教老師關於 高併發插入資料問題
- 資料庫事務併發產生的問題以及事務的隔離級別資料庫
- mysql併發操作問題MySql
- 資料併發操作帶的的問題及解決辦法
- 資料庫常見問題資料庫
- 資料庫被鎖問題資料庫
- jbuilder 與資料庫問題UI資料庫
- 資料庫中文問題,急資料庫
- jbuilder資料庫中文問題UI資料庫
- 配置資料庫問題?求救資料庫
- 資料庫關聯問題資料庫
- 資料庫同步更新問題?資料庫
- 資料庫問題求證資料庫
- sybase iq 資料庫 問題資料庫
- Domino 資料庫超大問題資料庫
- 資料庫欄位問題資料庫
- 資料庫啟動問題資料庫
- 分析發生在過去的資料庫效能問題資料庫
- jboss訪問資料庫的問題資料庫
- spring 對資料庫的併發操作Spring資料庫
- 資料庫併發控制幾隻——事務資料庫