想象乙個場景:
小明給小花 匯款 5000元 買 iphone,操作介面不用管,不管什麼操作介面,最終都要落實到這樣兩條語句的執行:
update 存款表 set money = money - 5000 where 賬戶=』小明』;
update 存款表 set money = money + 5000 where 賬戶=』小花』;
當,第一條語句執行成功,突然斷電了(或任何其他情況),就會造成資料的「不一致」。
要解決這個問題,就是「事務」的功能:
事務就是用來保證多條「增刪改」語句的執行的「一致性」:要麼都執行完成,要麼都沒有執行;
事務模式是指:
在我們的cmd命令列模式中,是否開啟了「一條語句就是乙個事務」的這個開關:
預設情況下(安裝後),這個模式是開啟的,稱為「自動提交模式」;
set autocommit = 1;
這樣之後,每條增刪改語句,都會立即生效;
我們可以把它關閉,那就是「人為提交模式」——即需要人為提交;
set autocommit = 0;
這樣之後,所有增刪改語句,都必須使用commit之後,才能生效;
首先,我們以前的經驗都是:一條增刪改語句,一旦回車,執行就完成(前提是不出錯);
現在,我們關閉該模式:
然後,再去執行一條簡單的insert語句:
對比:執行前:
然後,執行insert:
但是,再檢視結果,即insert執行之後,資料並沒有出現:
然後,再去「人為提交」:
然後,再核查資料,就有了:
1,開啟乙個事務:
start transaction; //也可以寫成:begin;
2,執行多條增刪改語句; //也就是相當於希望這多條語句要作為乙個「不可分割」的整體去執行的任務
3,判斷這些語句執行的結果情況,並進行提交或回滾:
if( 沒有出錯 ){
commit; //提交事務;此時就是一次性完成;
else{
rollback; //回滾事務;此時就是全部撤銷;
具體分2種情況來做:
在cmd中,就是憑「肉眼」觀察是否有錯:
沒有錯誤的情況:
有錯誤的情況:
在php中:
mysql 併發控制及事務
實現的併發訪問的控制技術是基於鎖 鎖分為表級鎖和行級鎖,myisam儲存引擎不支援行級鎖 innodb支援表級鎖和行級鎖 鎖的分類有讀鎖和寫鎖,讀鎖也被稱為共享鎖,加讀鎖的時候其他的人可以讀 寫鎖也稱為獨佔鎖或排它鎖,乙個寫鎖會阻塞其他讀操作和寫操作 鎖還分為隱式鎖和顯式鎖,隱式鎖由儲存引擎自行管理...
mysql事務總結 mysql事務特點總結
1.mysql事務有4個隔離級別,以及會出現的問題如下圖 2.髒讀 開啟事務a,b。事務a在還沒有提交的情況下,假如第一次查詢id 1的使用者的age 24。事務b執行了update 表 set age 100 where id 1 b事務並沒有提交,緊接著再次查詢id 1的使用者的age時,age...
mysql 事務控制
同乙個會話中,執行insert update delete操作後,在會話commit之前,此時當前回話執行select操作可以檢索到更改的內容,其他會話無法檢索到當前回話更改的內容 進行業務處理時,當前業務如果沒有處理成功,要rollback當前回話已經執行的insert update delete...