資料庫事務

2021-08-31 01:37:44 字數 1398 閱讀 9024

1.事務定義

執行一條或多條sql語句對資料庫進行操作的行為,以達到更高層次更複雜邏輯的功能。

2.事務的四個特性

原子性:作為乙個整體,要麼對資料庫都操作成功,要麼都失敗對資料庫不產生影響

一致性:事務執行前後的資料一致,如a向b轉賬,轉完後ab賬戶的總和不變,和沒轉前一致

隔離性:對併發事務的隔離,保證事務間互不影響,資料庫提供了多種隔離級別,稍後會介紹到

永續性:事務一旦提交,對資料庫中的資料的改變是永久性的

3.事務隔離級別

理解事務隔離級別之前,先要理解下面幾個常見事務問題

(1) 髒讀:指讀取了另乙個未提交的事務中的資料

eg:a向b轉錢,但不提交

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沒有轉錢給她

(2)不可重複讀:指讀取同一事務資料卻不一致

eg:a向b轉錢並提交

update scott.t_acount set money = money + 1000 where name = 『b』;

commit;

c和 d依次在提交前後查詢了b的金額,查出結果剛好不一致,就打起來了。。。。

(3)幻讀:剛對某條資料改完,另一事務又對其進行了修改,再讀取時出現沒改的"幻覺"

事務隔離級別**

隔離級別

名稱可避免的問題

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 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...