什么是事務(wù)
概念
事務(wù)
Transaction,一個最小的、不可再分的工作單元,通常一個事務(wù)對應(yīng)一個完整的業(yè)務(wù)。InnoDB引擎是支持事務(wù)的,MyISAM不支持事務(wù)。
- 在MySQL中,一條SQL語句就是一個事務(wù)。
- 一個完整的業(yè)務(wù)需要大量的
DML(insert、update、delete)語句來共同完成。只有DML數(shù)據(jù)操作語句才有事務(wù)。 - 事務(wù)保證一組
SQL語句要么全部成功,要么全部失敗。
栗子:銀行轉(zhuǎn)賬業(yè)務(wù)
比如在兩個表中,A(原有400)給B(原有200)轉(zhuǎn)200塊錢,包含兩個過程:A轉(zhuǎn)出200,B轉(zhuǎn)進200,只有當兩個過程全部完成才算真正的執(zhí)行了一個事務(wù)過程。
update user set fee=200 where id=1; # 語句1
# 由于斷網(wǎng)斷電等不可控制原因,可能下面的語句不能成功執(zhí)行
update user set fee=400 where id=2; # 語句2
- 語句1的成功執(zhí)行,并不能將底層數(shù)據(jù)庫中的第一個賬戶的數(shù)據(jù)進行修改,單純地記錄操作,記錄在內(nèi)存中完成
- 第二條語句成功執(zhí)行之后,和底層數(shù)據(jù)庫文件中的數(shù)據(jù)完成同步
- 若第二條數(shù)據(jù)執(zhí)行失敗,清空所有的歷史記錄
事務(wù)相關(guān)術(shù)語
開啟事務(wù):start transaction;
事務(wù)結(jié)束:end transaction;
提交事務(wù):commit transaction;(執(zhí)行成功)
回滾事務(wù):rollback transaction;(執(zhí)行失?。?br>
(執(zhí)行成功);只有進行了commit操作,數(shù)據(jù)才會從內(nèi)存中寫入磁盤中
事務(wù)特點
事務(wù)具有四大特點,簡稱為
ACID:
- 原子性
Atomicity:一個事務(wù)中的語句,要么全部成功,要么全部失敗。 - 一致性
Consistency:在事務(wù)開始之前或者結(jié)束之后,必須保持數(shù)據(jù)庫的一致性。比如上面的栗子中,A減掉200,那么相應(yīng)的,B一定要加上200。否則數(shù)據(jù)庫中的數(shù)據(jù)不一致。 - 隔離性
Isolation:比如:當多個用戶并發(fā)訪問數(shù)據(jù)庫,操作同一張表時,數(shù)據(jù)庫為每一個用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個并發(fā)事務(wù)之間要相互隔離。用戶的操作之間存在獨立性。事務(wù)A和B之間具有隔離性。 - 持久性
Durability:持久性是指一個事務(wù)一旦被提交了,那么對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會丟失提交事務(wù)的操作。事務(wù)的成功,是硬盤數(shù)據(jù)上的更改,不僅是內(nèi)存上的變化。持久性是事務(wù)的保證,是事務(wù)結(jié)束的標志。
事務(wù)開始和結(jié)束標志
開始標志
任何一條DML語句的執(zhí)行,標志事務(wù)開始
結(jié)束標志
- commit:提交
- 成功的結(jié)束
- 將所有的DML語句的操作歷史記錄和底層硬盤中的數(shù)據(jù)進行了同步。
- 只有事務(wù)成功執(zhí)行,硬盤中的數(shù)據(jù)才會進行修改更新。
- rollback:回滾
- 失敗的結(jié)束
- 將所有的DML語句的操作記錄進行全部清空。