MySQL基礎教程之事務異常情況
測試異常情況
-- 1. 查詢張三余額 select * from account where name = '張三'; -- 2. 張三的余額減少1000 update account set money = money - 1000 where name = '張三'; 出錯了.... -- 3. 李四的余額增加1000 update account set money = money + 1000 where name = '李四';
- 我們把數(shù)據都恢復到2000, 然后再次一次性執(zhí)行上述的SQL語句(出錯了.... 這句話不符合SQL語 法,執(zhí)行就會報錯),檢查最終的數(shù)據情況, 發(fā)現(xiàn)數(shù)據在操作前后不一致了。
控制事務一
查看/設置事務提交方式
SELECT @@autocommit ; SET @@autocommit = 0 ;
提交事務
COMMIT;
回滾事務
ROLLBACK;
注意:
上述的這種方式,我們是修改了事務的自動提交行為, 把默認的自動提交修改為了手動提 交, 此時我們執(zhí)行的DML語句都不會提交, 需要手動的執(zhí)行commit進行提交。
控制事務二
開啟事務
START TRANSACTION 或 BEGIN ;
提交事務
COMMIT;
回滾事務
ROLLBACK;
轉賬案例:
-- 開啟事務 start transaction -- 1. 查詢張三余額 select * from account where name = '張三'; -- 2. 張三的余額減少1000 update account set money = money - 1000 where name = '張三'; -- 3. 李四的余額增加1000 update account set money = money + 1000 where name = '李四'; -- 如果正常執(zhí)行完畢, 則提交事務 commit; -- 如果執(zhí)行過程中報錯, 則回滾事務 -- rollback;
事務四大特性
- 原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功,要么全部失敗。
- 一致性(Consistency):事務完成時,必須使所有的數(shù)據都保持一致狀態(tài)。
- 隔離性(Isolation):數(shù)據庫系統(tǒng)提供的隔離機制,保證事務在不受外部并發(fā)操作影響的獨立環(huán)境下運行。
- 持久性(Durability):事務一旦提交或回滾,它對數(shù)據庫中的數(shù)據的改變就是永久的。上述就是事務的四大特性,簡稱ACID。
補充:Mysql 事務并發(fā)處理的三種異常
臟讀(Dirty Read)【一個事務可能讀取到另一個事務更新但未提交的數(shù)據,這個數(shù)據有可能是臟數(shù)據】
不可重復讀(Nnrepeatable Read)【事務不可重復讀同一條記錄,因為很可能讀到的結果不一致】
幻讀(Phantom Read)【幻讀就是沒有讀到的記錄,以為不存在,但其實是可以更新成功的,并且,更新成功后,再次讀取,就出現(xiàn)了?!?/p>
A1訪問數(shù)據庫,正在進行事務,往表B里加入一條記錄,但是還未提交該事務,此時A2也去訪問數(shù)據庫了,這個時候,A2可以看到A1加入的數(shù)據,這種現(xiàn)象就是臟讀。
A2訪問數(shù)據庫查看id=1的數(shù)據,這個時候A1訪問數(shù)據庫,開始了一個事務,更新了id=1的數(shù)據,且沒有提交。然后A2又去訪問數(shù)據庫查看id=1的數(shù)據,看到的數(shù)據跟第一次看到的數(shù)據不一樣,而是A1更新的數(shù)據,這種現(xiàn)象就是不可重復讀。
A2訪問數(shù)據庫,查看B表里的全部數(shù)據。這個時候A1又往B表里加一條記錄,開始了事務但是還未提交。這個時候A2又去查看了一下,就出現(xiàn)了A1加進去的但還未提交的數(shù)據,這種現(xiàn)象就是幻讀。
總結
到此這篇關于MySQL基礎教程之事務異常情況的文章就介紹到這了,更多相關MySQL事務異常情況內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug
這篇文章主要介紹了IDEA使用mybatis-generator以及配上mysql8.0.3版本遇到的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11