什麼是髒讀:
step1: 應用a從rdbms讀取了整數x, 此時x=0
step2: 將10賦值給x,並儲存到資料庫中x=10,此時資料庫還沒完成資料庫的事務提交操作。
step3: 應用b從rdbms讀取x, 此時讀到的x值為10
step4: 應用a放棄了提交,因此它將資料庫中的x恢復為0。
step5: 應用b將15加給x,並儲存到rdbms,此時x=25
這種讀取到未提交的資料稱之為髒讀(dirty read).
什麼是unrepeatable(不可重複讀):
step1: 從rdbms讀取x
step2: 另一應用使用新的x值覆蓋了rdbms中的x
step3:當再次從rdbms讀取x時,發現資料被改動了。
什麼是phantom(幻讀):
step1: 應用查詢rdbms,返回相應的資料集合
step2: 另一應用插入新的資料到rdbms中
step3: 當再次執行查詢操作時,新的資料出現在返回結果中。
unrepeatable read 和 phantom 的區別可能是unrepeateable read加的行級鎖,phantom是對整個表加鎖。
設定合適資料庫的事務隔離級別防止上述問題發生:
1read uncommited:將會出現髒讀問題。如果不存在併發事務,且只有單個例項處於執行中,則
比較適合。
2read commited:能解決髒讀問題,適用於只需要從rdmbs中讀取資料的應用,但不能解決不可
重複讀。oracle, sql server 預設的級別。
3repeatable read:解決drity read和unrepeatable問題。
可以用"樂觀鎖"達到同樣目的。
4serializable:
這個完全序列化獨佔式運算元據庫。效能嘛^-^.
隔離程度越高,資料庫併發性越差;隔離程度越低,資料庫併發性越好。
事務的隔離級別舉例 事務的隔離級別
乙個事務是乙個完整的業務邏輯單元,不能再分,要麼全部執行成功,要麼全部失敗。比如 a給b轉賬100元,a的銀行卡就會少100元,b的銀行卡就會多100元,整個過程要麼全部執行成功,要麼全部失敗。a 原子性。事務是最小的業務邏輯單元。b 一致性。乙個事務必須保證多條dml語句同時成功或失敗。c 隔離性...
事務的隔離級別舉例 JDBC 事務隔離級別
本文總結了 jdbc 事務隔離級別。事務隔離級別定義了在乙個事務中,哪些資料是對當前執行的語句 可見 的。在併發訪問資料庫時,事務隔離級別定義了多個事務之間對於同個目標資料來源訪問時的可交叉程度。可交叉程度可分為以下幾類。可交叉程度 dirty reads 髒讀 當乙個事務能看見另外乙個事務未提交的...
事務的隔離級別舉例 JDBC事務隔離級別
一組要麼同時執行成功,要麼同時執行失敗的sql語句。是資料庫操作的乙個執行單元。斷開與資料庫的連線 表示乙個事務內的所有操作是乙個整體,要麼全部成功,要麼全部失敗 表示乙個事務內有乙個操作失敗時,所有的更改過的資料都必須回滾到修改前狀態 事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀...