Mysql中事務控制及特點

2021-08-09 17:10:52 字數 1614 閱讀 4622

想象乙個場景:

小明給小花 匯款 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...