事務(wù)是指針對數(shù)據(jù)庫的一組操作,這組操作由一條或者多條sql語句組成。事務(wù)的執(zhí)行要么全部成功,要么返回到事務(wù)開始前的狀態(tài)。
//開啟事務(wù)
START TRANSACTION
//提交事務(wù)
COMMIT
//取消提交事務(wù)即回滾
ROLLBACK
事務(wù)四大特性
- 原子性。一個(gè)事務(wù)中的sql語句要么全部執(zhí)行成功,要么全部執(zhí)行失敗,中間如果執(zhí)行錯(cuò)誤會(huì)返回到事務(wù)開始前的狀態(tài)。
- 一致性。數(shù)據(jù)庫總是從一個(gè)一致性狀態(tài)到另外一個(gè)一致性狀態(tài),保證數(shù)據(jù)庫不會(huì)返回到一個(gè)未處理的事務(wù)中。
- 隔離性。一個(gè)事務(wù)在執(zhí)行過程中并不會(huì)受到其他事務(wù)的影響。
- 持久性。指事務(wù)一旦提交,對數(shù)據(jù)庫的修改時(shí)持久性的。
并發(fā)事務(wù)的問題
- 臟讀。事務(wù)讀取其他事務(wù)未提交的數(shù)據(jù)。
- 不可重復(fù)讀。一個(gè)事務(wù)在讀取某個(gè)數(shù)據(jù)一段時(shí)間后再去讀取該數(shù)據(jù)時(shí),兩次讀取的結(jié)果不一致。
- 幻讀。一個(gè)事務(wù)按照相同的查詢條件進(jìn)行查詢時(shí),讀取了其他事務(wù)新增的數(shù)據(jù)。
事務(wù)的隔離級(jí)別
- 讀未提交。一個(gè)事務(wù)可以讀取到其他事務(wù)未提交的數(shù)據(jù)。因此會(huì)造成臟讀。
- 讀已提交。事務(wù)只能讀取其他事物已經(jīng)提交的數(shù)據(jù),避免了臟讀問題。
- 可重復(fù)讀。解決了臟讀與不可重復(fù)讀問題。在讀取數(shù)據(jù)時(shí),在行記錄上加上共享鎖避免其他事物對該數(shù)據(jù)進(jìn)行修改,因此解決了不可重復(fù)讀問題。但是并不能避免其他事務(wù)insert插入新的數(shù)據(jù)因此造成幻讀問題。
- 可串行化。在每個(gè)讀的數(shù)據(jù)行上加鎖,使其不會(huì)發(fā)生沖突,避免了臟讀,不可重復(fù)讀以及幻讀問題。