1.事務裡一些有問題的讀取:髒讀,不可重複讀,幻象讀
髒讀 (dirty read)事務t1更新了一行記錄的內容,但是並沒有提交所做的修改。事務t2讀取更新後的行,然後t1執行回滾操作,取消了剛才所做的修改。現在t2所讀取的行就無效了。
不可重複讀取 (nonrepeatable read)事務t1讀取一行記錄,緊接著事務t2修改 了t1剛才讀取的那一行記錄。然後t1又再次讀取這行記錄,發現與剛才讀取的結果不同。這就稱為「不可重複」讀,因為t1原來讀取的那行記錄已經發生了變化。
幻像讀取 (phantom read)事務t1讀取一條指定的where子句所返回的結果集。然後事務t2新插入 一行記錄,這行記錄恰好可以滿足t1所使用的查詢條件中的where 子句的條件。然後t1又使用相同的查詢再次對錶進行檢索,但是此時卻看到了事務t2剛才插入的新行。這個新行就稱為「幻像」,因為對t1來說這一行就像突 然出現的一樣。
2.事務的隔離級別
從級別低到高依次為:
read uncommitted 幻像讀、不可重複讀和髒讀都允許。
read committed 允許幻像讀、不可重複讀,但不允許髒讀。
repeatable read 允許幻像讀,但不允許不可重複讀和髒讀。innodb預設級別
serializable 幻像讀、不可重複讀和髒讀都不允許。
但是innodb的可重複讀隔離級別和其他資料庫的可重複讀是有區別的,不會造成幻象讀(phantom read)。
oracle資料庫支援 read committed 和 serializable ,不支援 read uncommitted 和 repeatable read 。
事務 隔離級別 髒讀 不可重複 幻讀
事務,就是一組運算元據庫的動作集合。如果一組 處理步驟 全部發生或者一步也不執行,我們稱該組處理步驟為乙個事務。當所有的步驟像乙個操作一樣被完整地執行,我們稱該事務被提交。由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。二 事務的併發問題 1 髒讀 事務 a讀取了...
MySQL事務隔離級別以及髒讀 幻讀 不可重複讀
事務的隔離性 mysql是乙個客戶端 伺服器架構的軟體,對於同乙個伺服器來說,可以有若干個客戶端與之連線,每個客戶端與伺服器連線上之後,就可以稱之為乙個會話 session 每個客戶端都可以在自己的會話中向伺服器發出請求語句,乙個請求語句可能是某個事務的一部分,也就是對於伺服器來說可能同時處理多個事...
mysql事務隔離級別 髒讀,不可重複讀,幻象讀
髒讀 dirty read 事務t1更新了一行記錄的內容,但是並沒有提交所做的修改。事務t2讀取更新後的行,然後t1執行回滾操作,取消了剛才所做的修改。現在t2所讀取的行就無效了。不可重複讀取 nonrepeatable read 事務t1讀取一行記錄,緊接著事務t2修改 了t1剛才讀取的那一行記錄...