MySQL札記16_MySQL事務(wù)(面試必備)

什么是事務(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語句的操作記錄進行全部清空。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容