我們先看一個例子:
例如:轉賬是生活中常見的操作,比如從A賬戶轉賬100元到B賬號叹洲。站在用戶角度而言,這是一個邏輯上的單一操作,然而在數(shù)據(jù)庫系統(tǒng)中,至少會分成兩個步驟來完成:
- 將A賬戶的金額減少100元
- 將B賬戶的金額增加100元糠排。
在這個過程中可能會出現(xiàn)以下問題:
- 轉賬操作的第一步執(zhí)行成功,A賬戶上的錢減少了100元,但是第二步執(zhí)行失敗或者未執(zhí)行便發(fā)生系統(tǒng)崩潰,導致B賬戶并沒有相應增加100元底瓣。
- 轉賬操作剛完成就發(fā)生系統(tǒng)崩潰,系統(tǒng)重啟恢復時丟失了崩潰前的轉賬記錄。
- 同時又另一個用戶轉賬給B賬戶,由于同時對B賬戶進行操作,導致B賬戶金額出現(xiàn)異常姿染。
數(shù)據(jù)庫為了解決這類為題引入“事務”。
定義:
數(shù)據(jù)庫事務是構成單一邏輯工作單元的操作集合。(就是保證一系列連貫的操作吨娜,必須同時成功,有一個失敗判定失斕灾印)
事務4大特點
原子性:事務里邊的操作就和原子一樣是不可分割的
一致性:事務執(zhí)行前后是從一個一致性狀態(tài)到另一個一致性狀態(tài)(如轉賬宦赠,完成前后總量不變)
隔離性:并發(fā)執(zhí)行的事務不會相互影響
持久性:事務一旦提交,其對數(shù)據(jù)庫的更新就是持久的。任何事務或系統(tǒng)故障都不會導致數(shù)據(jù)丟失日月。
【注】 隔離性有隔離等級袱瓮,等級不同,隔離效果不同
MYSQL 事務處理主要有兩種方法:
- 用 BEGIN, ROLLBACK, COMMIT來實現(xiàn)
BEGIN 開始一個事務
ROLLBACK 事務回滾
COMMIT 事務確認- 直接用 SET 來改變 MySQL 的自動提交模式:
SET AUTOCOMMIT=0 禁止自動提交
SET AUTOCOMMIT=1 開啟自動提交
這里引用大神的總結爱咬,我這就不獻丑。值得學習->事務詳解