SQL筆記(14) 事務

2021-10-25 10:30:07 字數 801 閱讀 3892

資料庫事務( transaction)是訪問並可能操作各種資料項的乙個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是乙個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。

詳情參見:

read uncommitted是隔離級別最低的一種事務級別。在這種隔離級別下,乙個事務會讀到另乙個事務更新後但未提交的資料,如果另乙個事務回滾,那麼當前事務讀到的資料就是髒資料,這就是髒讀(dirty read)。

在read committed隔離級別下,乙個事務可能會遇到不可重複讀(non repeatable read)的問題。

不可重複讀是指,在乙個事務內,多次讀同一資料,在這個事務還沒有結束時,如果另乙個事務恰好修改了這個資料,那麼,在第乙個事務中,兩次讀取的資料就可能不一致。

在repeatable read隔離級別下,乙個事務可能會遇到幻讀(phantom read)的問題。

幻讀是指,在乙個事務中,第一次查詢某條記錄,發現沒有,但是,當試圖更新這條不存在的記錄時,竟然能成功,並且,再次讀取同一條記錄,它就神奇地出現了。

serializable是最嚴格的隔離級別。在serializable隔離級別下,所有事務按照次序依次執行,因此,髒讀、不可重複讀、幻讀都不會出現。

雖然serializable隔離級別下的事務具有最高的安全性,但是,由於事務是序列執行,所以效率會大大下降,應用程式的效能會急劇降低。如果沒有特別重要的情景,一般都不會使用serializable隔離級別。

如果沒有指定隔離級別,資料庫就會使用預設的隔離級別。在mysql中,如果使用innodb,預設的隔離級別是repeatable read。

SQL筆記06 事務

單條sql 資料庫自動將其作為乙個事務執行,這種事務被稱為隱式事務 多條sql語句作為乙個事務執行,begin開啟事務,commit提交事務,顯式事務 commit 提交事務,即試圖把事務內的所有sql所做的修改永久儲存,如果commit失敗了,所有的sql都會失敗 rollback 回滾事務,主動...

sql學習筆記 事務

事務的特性 acid 原子性 乙個事物不可再分割,要麼都執行要麼都不執行 一致性 乙個事務的執行會使資料從乙個一致狀態切換到另乙個一致狀態 隔離性 乙個事務的執行不受其他事務的干擾 永續性 乙個事務一旦提交,則會永久的改變資料庫的資料 事務的建立 事務沒有明顯的開啟和結束的標記 開啟事務 set a...

14 Spring事務原理

enabletransactionmanagement利用transactionmanagementconfigurationselector往容器中注入了兩個類 autoproxyregistrar proxytransactionmanagementconfiguration autoproxy...