事務指邏輯上的一組操作,組成這組操作的各個單元,要不全部成功,就全部不成功,同乙個事務的操作具備同步優點
start
transaction;|
begin
;···
····
rollback
;commit
;
start transaction | begin:開啟事務(處於事務中,不會影響資料庫資料)
rollback:回滾事務(取消事務,前提是事務未提交前回滾)
commit :事務提交(事務生效後會立即影響資料庫資料)
原子性(atomicity)
指事務是乙個不可分割的工作單位,事務中的操作要麼執行成功,要麼執行失敗
一致性(consistency)
事務前後資料的完整性必須保持一致(資料庫的完整性:如果資料庫在某個時間點下,所有的資料都符合所有的約束,則稱資料庫為符合完整性的狀態)
隔離性(isolation)
指多個使用者併發訪問資料庫時,乙個使用者的事務不能被其它使用者的事務所干擾,多個併發事務之間資料要相互隔離
永續性(durability)
指乙個事務一旦被提交,資料庫中的資料改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響
髒讀:兩事務 某一事務讀取到另乙個事務修改且未提交的資料
不可重複讀:某一事務多次讀取同一條記錄的過程,讀取的結果不相同過程資料有更改,讀取到另乙個事務已經提交的資料
虛讀(幻讀):某一事務多次查詢資料,由於其他事務 新增 或 刪除 記錄造成多次查詢出的記錄條數不同
防止不同隔離性的問題
隔離型別
髒讀不可重複讀
幻讀未提交read uncommitted
允許允許
允許已讀提交read committed
禁止允許
允許可重複讀repeatable read
禁止禁止
可能順序讀serializable
禁止禁止
禁止一般預設可重複讀repeatable read 、已讀提交read committed
修改隔離級別
set [session | global] transaction isolation level 隔離型別;
session:當前會話
global:全域性
查詢隔離級別
select @@tx_isolation; (mysql版本8前)
select @@transaction_isolation; (mysql版本8後)
未提交 (read uncommitted)
讀未提交,該隔離級別允許髒讀取,其隔離級別是最低的
時間(t)
事務a (存)
事務b(取)
t1開始事務
開始事務
t2==
查餘額(500元)
t3==
取300元
t4查餘額(200元)
==t5
==滾動事務
t6存800元
==t7
提交事務
==t8
取100元
t9提提交事務
最後餘額剩1200元。t4 a髒讀b修改的資料,t5 b回滾(撤回t5前的所有操作),最後b只提取100元!
已讀提交 (read committed)
讀已提交是不同的事務執行的時候只能獲取到已經提交的資料
時間(t)
事務a (存)
事務b(取)
t1開始事務
開始事務
t2==
查餘額(500元)
t3查餘額(500元)
==t4
==取500元
t5查餘額(500元)
==t6
==提交事務
t7查餘額(0)
t8提交事務
a只能讀取 事務提交後的資料!!
可重複讀 (repeatable read)
保證在事務處理過程中,多次讀取同乙個資料時,該資料的值和事務開始時刻是一致的
時間(t)
事務a事務b
t1開始事務
t2查所有資料
開始事務
t3==
插入一條資料
t4==
提交事務
t5查所有資料
t6修改範圍資料
t7查所有資料!
t8提交事務
事務a 的 t3 查詢資料 與 t5查詢資料 是一樣的 ,資料無誤後 對整表資料值修改,緊接查詢事務多出了一條資料!!(a 沒有對新增資料進行更改,則不會顯示,除非事務提交)
順序讀 (serializable)
最嚴格的事務隔離級別。事務以排隊形式進行執行。某一事務對資料進行修改必須等另乙個 提交 或 回滾 ,才可以進行資料修改!!
讀未提交(ru):有行級的鎖,沒有間隙鎖。與rc的區別是能夠查詢到未提交的資料
讀已提交(rc):有行級的鎖,沒有間隙鎖,讀不到沒有提交的資料
可重複讀(rr):有行級的鎖,有間隙鎖,每讀取的資料都一樣,且沒有幻讀的情況
序列化(s):有行級鎖,也有間隙鎖,讀表的時候,就已經上鎖了
MYSQL之事務篇
在引入事務之前我們先考慮銀行轉賬的操作 從id 1的賬戶給id 2的賬戶轉賬100元 第一步 將id 1的a賬戶餘額減去100 update accounts set balance balance 100where id 1 第二步 將id 2的b賬戶餘額加上100 update accounts...
mysql事務學習
mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱,文章等等,這樣,這些資料庫操作語句就構成乙個事務!在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行...
mysql事務學習
mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱,文章等等,這樣,這些資料庫操作語句就構成乙個事務!在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行...