5 如何防止事務併發讀問題的產生
6 事務隔離級別
7 資料庫鎖
8 事務與資料庫鎖的關係
9 mysql儲存引擎innodb與myisam
9.1 myisam
9.2 innodb(預設)
事務就是將一堆的sql語句(通常是增刪改操作)繫結在一起執行,要麼都執行成功,要麼都執行失敗,即都執行成功才算成功,否則就會恢復到這堆sql執行之前的狀態。
-- 開啟事務
start
transaction
;--sql操作...
-- 回滾事務
rollback
;--提交事務
commit
;--中斷操作
quit;
多個事務對相同的資料同時進行操作,這叫做事務併發.可能會導致各種併發問題
例如:在乙個事務中,a給b轉賬100元但未提交事務,在另一事務中b查詢賬戶金額,查詢到了a未提交更新的資料,我們稱之為髒讀
對同一記錄的兩次讀取結果不一致,因為在兩次查詢期間,有另一事務對該記錄做了修改(是針對修改操作)
例如:在事務1中,前後兩次查詢a賬戶的金額,在兩次查詢之間,另一事務2對a賬戶的金額做了修改(並且也提交了事務),此種情況可能會導致事務1中,前後兩次查詢的結果不一致。這就是不可重複讀
對同一張表的兩次查詢結果不一致,因為在兩次查詢期間,有另一事務進行了插入或者是刪除操作(是針對插入或刪除操作);
-- mysql查詢當前的事務隔離級別
select @@tx_isolation
;-- mysql設定事務隔離級別
set tx_isolation=
'read-uncommitted'
;
事務隔離級別分四個等級
安全性最差,可能出現任何事務併發問題(比如髒讀、不可以重複讀、幻讀等)
但效能最好(不使用!!)
可以防止髒讀,但不能防止不可重複讀,也不能防止幻讀;
可以防止髒讀和不可重複讀,但不能防止幻讀問題;
安全性最高,不會出現任何併發問題,因為它對同一資料的訪問是序列的,非併發訪問;
在myisam中只用到表鎖
innodb實現了行級鎖和表鎖,innodb行鎖是通過給索引上的索引項加鎖來實現的,只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖。
myisam的索引和資料是分開的
索引和資料是緊密**的
資料庫事務
事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...