Mysql事務控制語言


什么叫做“事務”:

想象一個場景:

小明給小花 匯款 5000元 買 IPHONE,操作界面不用管,不管什么操作界面,最終都要落實到這樣兩條語句的執行:

update  存款表  set  money = money - 5000  where  賬戶=’小明’;

update  存款表  set  money = money + 5000  where  賬戶=’小花’;

當,第一條語句執行成功,突然斷電了(或任何其他情況),就會造成數據的“不一致”。

 

要解決這個問題,就是“事務”的功能:

事務就是用來保證多條“增刪改”語句的執行的“一致性”:要么都執行完成,要么都沒有執行;

 

事務的特點:

  • 原子性:一個事務中的所有語句,應該做到:要么全做,要么一個都不做;
  • 一致性:讓數據保持邏輯上的“合理性”,比如:一個商品出庫時,既要讓商品庫中的該商品數量減1,又要讓對應用戶的購物車中的該商品加1;
  • 隔離性:如果多個事務同時並發執行,但每個事務就像各自獨立執行一樣。
  • 持久性:一個事務執行成功,則對數據來說應該是一個明確的硬盤數據更改(而不僅僅是內存中的變化)。

 

事務模式:

事務模式是指:

在我們的cmd命令行模式中,是否開啟了“一條語句就是一個事務”的這個開關:

默認情況下(安裝后),這個模式是開啟的,稱為“自動提交模式”;

set  autocommit = 1;

這樣之后,每條增刪改語句,都會立即生效;

我們可以把它關閉,那就是“人為提交模式”——即需要人為提交;

set  autocommit = 0;

這樣之后,所有增刪改語句,都必須使用commit之后,才能生效;

 

 

首先,我們以前的經驗都是:一條增刪改語句,一旦回車,執行就完成(前提是不出錯);

現在,我們關閉該模式:

 

然后,再去執行一條簡單的insert語句:

對比:

執行前:

然后,執行insert:

但是,再查看結果,即insert執行之后,數據並沒有出現:

然后,再去“人為提交”:

然后,再核查數據,就有了:

事務執行的基本流程

1,開啟一個事務:

start  transaction;       //也可以寫成:begin;

2,執行多條增刪改語句;  //也就是相當於希望這多條語句要作為一個“不可分割”的整體去執行的任務

3,判斷這些語句執行的結果情況,並進行提交或回滾:

if(  沒有出錯 ){

commit;       //提交事務;此時就是一次性完成;

}

else{

rollback;      //回滾事務;此時就是全部撤銷;

}

 

具體分2種情況來做:

在cmd中,就是憑“肉眼”觀察是否有錯:

沒有錯誤的情況:

有錯誤的情況:

 

 

 

在php中:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM