事務的四大特性以及隔離級別詳解

2021-08-29 00:19:00 字數 2391 閱讀 9671

今天操作mysql資料庫的時候突然想起了事務,然後就有了現在,首先我們來談談事務的四大特性吧。

1. 原子性(atomicity)

所謂事務的原子性,用一句話概括就是指的是事務中包含的所有操作,要不全部成功要不全部失敗並回滾。事務是資料庫的邏輯和工作單位。

2. 一致性(consistency)

然後是事務的一致性,指的是事務必須從乙個一致性狀態轉換到另乙個一致性狀態,通俗的說就是乙個事務執行前後都必須是一致性狀態。

舉個栗子:小明和小紅之間總共有520元錢,無論他們彼此轉賬多少次,各自持有多少元錢,最終還是520元錢。

3. 隔離性(isolation)

然後隔離性指的是多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務所干擾,多個併發事務之間要相互隔離。

即達到這麼乙個效果->併發事務s1和s2,在事務s1看來,事務s2要麼在事務s1執行之前就已經結束了,要麼在事務s1執行結束之後才開始;s2亦同理。這樣一來每個事務都感覺不到有其他事務併發執行。這裡涉及到事務的隔離級別,後面再說。

4. 永續性(durability)

最後乙個特性,永續性指的是事務一旦提交,他對資料庫中資料的改變是永久性的,接下來的其他操作或故障不應對其執行結果產生任何影響。

好了,以上就是事務的四大特性,簡稱acid。

首先,有必要了解一下 什麼是事務的隔離級別

事務隔離是資料庫事務處理的乙個基礎。在資料庫操作中,當有多個改變事務進行,同時又有多個查詢事務進行時,這時候就需要設定乙個東西對結果進行調節以保證結果的正確性,這個設定的東西就是事物的隔離級別。

那麼, 事務隔離級別的主要作用是什麼呢?

事務隔離級別主要是用來解決事務併發執行時所引發的一系列問題的。

如果事務沒有設定任何隔離級別,那麼將會發生以下問題:

一、讀的問題

1.髒讀

指乙個事務讀到了另乙個事務未提交的資料。(針對未提交的資料)

舉個栗子:張三查詢資料庫看到了小明的age是12,這時候李四將小明的age執行update操作變成了15,但是並沒有commit,這時候張三再次檢視小明的age,結果變成了15,導致前後兩次讀取資料不一致,這就是髒讀。

簡單的說乙個事務讀到了另乙個事務已經修改但是並未提交,最後反而回滾了的資料。

2.不可重複讀(針對提交前後資料本身的對比)

指乙個事務讀到了另乙個事務已經提交的資料,導致多次查詢結果不一致。

舉個栗子:張三查詢資料庫看到了小明的age是12,這時候李四將小明的age執行update操作變成了15,並且commit,這時候張三再次檢視小明的age,結果變成了15。這就是不可重複讀

3.幻讀(虛讀)(針對提交前後資料條數的對比)

指乙個事務讀到了另乙個事務插入的資料,導致多次查詢結果不一致。

舉個栗子:算了,不舉了,自己體會~~~

幻讀和不可重複讀的區別:

其實不可重複讀和幻讀很相似,只不過不可重複讀針對的是對資料的update操作,而幻讀針對的是對資料的insert操作。前者是資料條數不變,但是資料本身變化了;後者是資料條數變化了,但是資料本身不變。

那麼,為了解決以上問題,就得設定事務的隔離級別了。

mysql資料庫支援四種隔離級別(預設為第三種) ,隔離級別從低到高以及能解決的問題如下所示:

以上四種隔離級別按照功能排序是從低到高,但是按照效率排序是從高到低,剛好相反。

這裡在提一嘴,oracle資料庫只支援2和4兩種隔離級別,預設為2。

然後是如何檢視以及設定事務的隔離級別

select @@tx_isolatiion;							//檢視事務的隔離級別
//設定事務的隔離級別,根據實際需要設定,修改level後面的字段即可

set session transaction isolation level read committed;

二、寫的問題

ok,說完讀的問題,在簡單了解一下寫的問題。

其實寫的問題就乙個,那就是 丟失更新。所謂丟失更新,指的是乙個事務修改資料庫的時候,另乙個事務也在修改資料庫,那麼,最後乙個事務無論是提交還是回滾,都會造成前乙個事務的資料更新丟失。

那麼,如何解決寫的問題呢?那就是加鎖,悲觀鎖或者樂觀鎖。

悲觀鎖:還沒幹活就想著會出錯,查詢資料的後面跟上關鍵字for update;

樂觀鎖:程式設計師自己控制,在表裡面增加乙個欄位version(版本的意思),預設為0,每次操作,則遞增。下次操作時,先核對版本號,如果對不上,則表示是舊的資料,得先查詢再運算元據。

over,如果不當之處,歡迎拍磚~

事務的四大特性以及事務的隔離級別

1.原子性 原子性是指事務包含的所有的操作要麼全部成功,要麼全部失敗回滾。因此事物的操作,如果成功就必須要完全應用到資料庫。如果操作失敗則不能對資料庫 有任何影響 2.一致性 一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態。也就是說乙個事務執行之前和執行字後都必須處於一致性狀態 拿...

事務的四大特性和隔離級別

事務,其定義是應用程式中一系列不可分割的操作,就是一組可以完成某個業務的 集合,在關聯式資料庫中,事務可以是一條sql語句,或者一組sql語句,亦或整個程式。其中事務有四個特徵,必須同時滿足這四個特徵才是乙個完整的事務。即事務的acid特性 原子性 atomicity 即事務是資料庫的不可分割單元,...

事務的概念 四大特性 隔離級別

首先,說說什麼事務 transaction 事物就是乙隻運算元據庫的動作集合 處理步驟要麼全部成功 要麼全部失敗 如果一步一步都執行完成 我們稱之為失誤已提交 如果中間有一步執行失敗 失誤必須被回滾 資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committ...