1.事務定義
執行一條或多條sql語句對資料庫進行操作的行為,以達到更高層次更複雜邏輯的功能。
2.事務的四個特性
原子性:作為乙個整體,要麼對資料庫都操作成功,要麼都失敗對資料庫不產生影響
一致性:事務執行前後的資料一致,如a向b轉賬,轉完後ab賬戶的總和不變,和沒轉前一致
隔離性:對併發事務的隔離,保證事務間互不影響,資料庫提供了多種隔離級別,稍後會介紹到
永續性:事務一旦提交,對資料庫中的資料的改變是永久性的3.事務隔離級別
理解事務隔離級別之前,先要理解下面幾個常見事務問題
(1) 髒讀:指讀取了另乙個未提交的事務中的資料
eg:a向b轉錢,但不提交(2)不可重複讀:指讀取同一事務資料卻不一致update scott.t_acount set money = money + 1000 where name = 『b』;
/* commit;*/
select ac.money from scott.t_acount ac where ac.name = 『b』;
此時由於a未提交,b髒讀了a的資料,認為a沒有轉錢給她
eg:a向b轉錢並提交(3)幻讀:剛對某條資料改完,另一事務又對其進行了修改,再讀取時出現沒改的"幻覺"update scott.t_acount set money = money + 1000 where name = 『b』;
commit;
c和 d依次在提交前後查詢了b的金額,查出結果剛好不一致,就打起來了。。。。
事務隔離級別**
隔離級別
名稱可避免的問題
1read uncommited(讀未提交)無2
read commited(讀已提交)髒讀3
repeatable read(可重複讀)
髒讀,不可重複讀
4serializable (序列化)
髒讀,不可重複讀,幻讀
級別越高,執行效率就越低。像serializable這樣的級別,就是以鎖表的方式使得其他的執行緒只能在鎖外等待,所以平時選用何種隔離級別應該根據實際情況。
mysql資料庫,支援上面四種隔離級別,預設為repeatable read;
oracle資料庫,只支援serializable和read committed 這兩種,預設為read committed。
第一次用部落格,並沒有想象中那麼簡單啊|:::? 資料庫事務
事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...