acid
原子性(automicity):不可分割的最小單位,要麼同時成功,要麼同時失敗。
永續性(durablity):當事務提交或回滾之後,資料庫會持久化的儲存資料。
隔離性(isolation):多個事務之間相互獨立。事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干預,事務之間要相互隔離。
一致性(consistency):事務操作前後,資料總量不變。
針對同乙個事務
這個過程包含兩個步驟
a: 800 - 200 = 600
b: 200 + 200 = 400
原子性表示,這兩個步驟一起成功,或者一起失敗,不能只發生其中乙個動作。
表示事務結束後的資料不隨著外界原因導致資料丟失
操作前a:800,b:200
操作後a:600,b:400
如果在操作前(事務還沒有提交)伺服器宕機或者斷電,那麼重啟資料庫以後,資料狀態應該為
a:800,b:200
如果在操作後(事務已經提交)伺服器宕機或者斷電,那麼重啟資料庫以後,資料狀態應該為
a:600,b:400
針對多個使用者同時操作,主要是排除其他事務對本次事務的影響
兩個事務同時進行,其中乙個事務讀取到另外乙個事務還沒有提交的資料
針對乙個事務操作前與操作後的狀態一致
操作前a:800,b:200
操作後a:600,b:400
一致性表示事務完成後,符合邏輯運算
多個事務之間隔離的,相互獨立的,但是如果多個事務操作同一批資料,則會引發一些問題,設定不同的隔離級別就可以解決這些問題。
髒讀:乙個事務,讀取到另乙個事務中沒有提交的資料
不可重複讀(虛讀):在同乙個事務中,兩次讀取的資料不一樣
幻讀:乙個事務操作(dml)資料表中所有記錄,另乙個事務新增了一條資料,則第乙個事務查詢不到自己的修改。
設定這樣的資料庫隔離級別,會產生的問題:髒讀、不可重複讀、幻讀
產生的問題:不可重複讀、幻讀
產生的問題:幻讀
可以解決所有的問題。其實就是乙個鎖表的動作,如果乙個事務在操作一張資料表,另外乙個事務是不可以操作這張表的,只有當這個鎖開啟之後,才可以操作。但是這樣的效率會很低。
注意:隔離級別從小到大安全性越來越高,但是效率越來越低
資料庫查詢隔離級別:
資料庫設定隔離級別:
set global transaction isolation level 級別字串;
zhangsan這邊開了乙個視窗:執行下面的操作
lisi這邊開了個視窗:檢視錢是否到賬:
lisi發現錢到賬了
之後,zhangsan又執行了一步回滾的操作
lisi再去查,發現錢並沒有轉過來,這樣就發生了髒讀,不可重複讀
隔離級別設定成可重複讀:
zhangsan賬戶:
lisi賬號:
序列化:
其實就是乙個鎖表的動作,如果乙個事務在操作一張資料表,另外乙個事務是不可以操作這張表的,只有當這個鎖開啟之後,才可以操作。但是這樣的效率會很低。
set global transaction isolation level serializable;
start transaction;
-- 轉賬操作:
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;
select @@tx_isolation;
事務的四大特性以及事務的隔離級別
1.原子性 原子性是指事務包含的所有的操作要麼全部成功,要麼全部失敗回滾。因此事物的操作,如果成功就必須要完全應用到資料庫。如果操作失敗則不能對資料庫 有任何影響 2.一致性 一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態。也就是說乙個事務執行之前和執行字後都必須處於一致性狀態 拿...
事務的四大特性和隔離級別
事務,其定義是應用程式中一系列不可分割的操作,就是一組可以完成某個業務的 集合,在關聯式資料庫中,事務可以是一條sql語句,或者一組sql語句,亦或整個程式。其中事務有四個特徵,必須同時滿足這四個特徵才是乙個完整的事務。即事務的acid特性 原子性 atomicity 即事務是資料庫的不可分割單元,...
事務的概念 四大特性 隔離級別
首先,說說什麼事務 transaction 事物就是乙隻運算元據庫的動作集合 處理步驟要麼全部成功 要麼全部失敗 如果一步一步都執行完成 我們稱之為失誤已提交 如果中間有一步執行失敗 失誤必須被回滾 資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committ...