資料庫併發訪問會出現以下4種問題:
1、第一類丟失更新:事務b巢狀在事務a中,事務b已經更新,之後事務a更新失敗,a回滾,丟失了b的更新。(支援事務的資料庫不會出現此問題)
2、髒讀:讀到其他事務還未提交的資料。
3、不可重複讀:在同一事務中,兩次讀取的資料不一致。(被其他事務修改了)
4、幻讀:兩次讀取的記錄數不一致。(針對插入和刪除操作)
設定資料庫的事務隔離級別可以防止以上問題:
隔離級別
髒讀(dirty read)
不可重複讀(nonrepeatable read)
幻讀(phantom read)
說明(mssql2000中測試)
讀未提交(read uncommitted)
可能可能
可能讀已提交(read committed)
不可能可能
可能1、保證查詢到的是其他事務已經提交的資料。(update/delete/insert語句優先)
2、測試語句如下,先執行事務a,再執行事務b:
事務a:
begin tran
set tran isolation level read committed
--update ql_車號 set 車號=車號 +'1'
--insert into ql_車號 values('aaa33')
delete from ql_車號 where 車號= 'aaa11'
select * from ql_車號
waitfor delay '00:00:03'
commit
事務b:
begin tran
set tran isolation level read committed
select * from ql_車號
--waitfor delay '00:00:03'
--select * from ql_車號
--waitfor delay '00:00:04'
commit
可重複讀(repeatable read)
不可能不可能
可能1、保證在同一事務中,前後讀出的資料是一致的。(select語句優先)
2、先事務a讀取資料,事務a完畢前,執行事務b修改資料.事務b中使用update或delete語句,若有符合條件的資料,則等待事務a執行完成再執行事務b;若沒有符合條件的資料(即不會影響原來的資料),則事務a、b各自執行。
3、對事務b中的insert語句不起作用。(所以會出現幻讀)
4、測試語句如下,先執行事務a,再執行事務b:
事務a:
begin tran
set tran isolation level repeatable read
select * from ql_車號
waitfor delay '00:00:03'
select * from ql_車號
commit
事務b:
begin tran
set tran isolation level repeatable read
--update ql_車號 set 車號=車號 +'1'
delete from ql_車號 where 車號= 'aaa'
select * from ql_車號
commit
可序列化(serializable )
不可能不可能
不可能資料庫一般的預設隔離離級別是「讀已提交」,預設的事務隔離級別下:insert,update ,delete下的是x鎖, 會等待事務完成。通常情況下可以把隔離級別設為read commited,它能避免髒讀,而且有較好的併發效能。儘管它會導致不可重複讀、虛讀和第二類更新丟失等問題,在可能出現這類問題的個別場合可以由應用程式釆用
悲觀鎖或樂觀鎖
來控制。
mysql的預設事務隔離級別是repeatable_read,oracle、sql server、db2和postgresql的預設事務隔離級別是read_commited。
資料庫 索引 事務總結
一 索引 1 什麼是索引 索引是一種特殊的資料庫結構,它包含著對資料表裡所有記錄的引用指標,根據這個指標我們就可以找到這個指標所對應的記錄。可以對錶中的一列或多列建立索引,並指定索引的型別,各類索引有各自的資料結構實現。從某種程度上說,索引就相當於一本書的目錄,根據這個目錄中所寫的頁碼我們就能更快的...
資料庫總結 事務篇
巨集觀角度 應用程式設計師 乙個訪問或改變資料庫內容的程式的一次執行,或者說一條或多條sql語句一次執行被看作乙個事務。事務是資料庫管理系統提供的控制資料操作的一種手段,通過這一手段,應用程式設計師將一系列的資料庫操作組合在一起作為乙個整體進行操作和控制,以便資料庫管理系統能夠提供一致性狀態轉換的保...
資料庫事務的總結
用一句話簡單的說明 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作 對資料庫的相關增刪改查的操作 要麼完全地執行,要麼完全地不執行。資料庫的四大特性acid,原子性 一致性 隔離性 永續性。每個特性都有其特定的職責。2.1 原子性 乙個事務中的所有操作...