mysql中的事務處理

1、什麼是mysql中的事務?
事務就是包含一組不可分了的mysql單元,簡而言之就是一組連貫的SQL操作
2、事務有什麼特徵呢?
以下特性簡稱爲 :ACID
原子性(atom):確保工作單元內的所有操作都成功完成,否則事務將被中止在故障點,和以前的操作將回滾到以前的狀態

一致性(consistent): 確保數據庫正確地改變狀態後,成功提交的事務


隔離性(insulate): 使事務操作彼此獨立的和透明的
持久性(durable): 確保提交的事務的結果或效果的系統出現故障的情況下仍然存在
3、如果想讓一張表支持事務,那麼這張表的存儲引擎必須是innodb,mysql的存儲引擎分爲:
MyISAM: 它不支持事務,也不支持外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT爲主的應用基本都可以使
用這個引擎來創建表。每個MyISAM在磁盤上存儲成3個文件,其中文件名和表名都相同,但是擴展名分別爲:
.frm(存儲表定義)
MYD(MYData,存儲數據)
MYI(MYIndex,存儲索引)
InnoDB : InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率
差一些並且會佔用更多的磁盤空間以保留數據和索引
MEMORY: memory使用存在內存中的內容來創建表。每個MEMORY表實際對應一個磁盤文件,格式是.frm。MEMORY類型的表訪問
非常快,因爲它到數據是放在內存中的,並且默認使用HASH索引,但是一旦服務器關閉,表中的數據就會丟失,但表還會繼續存在。
4、mysql事務的使用步驟:
① 開啓事務
start transaction 或者 begin
② 寫sql 假設一個場景A向B轉賬 1000
update 表名 set 金額=金額-1000 where name='A'
update 表名 set 金額=金額+1000 where name='B'
③ 判斷sql是否執行成功(其實就是判斷sql的執行受影響行數),如果成功:
commit; 提交完成整個事務的處理過程,纔會真正的進行修改數據
如果有一個sql執行失敗,那麼事務將進行回滾操作:rollback 回滾操作就是說明這組sql中有一個沒完成,那麼所有數據都不會進行
更新


5、實例操作:現在用戶張三通過手機轉賬向李四轉錢100元:
<?php
header('content-type:text/html;charset=utf-8');
//實例化PDO
$dsn="mysql:host=127.0.0.1;dbname=test";
$db = new PDO($dsn,'root','');
try{
   //開啓事務
   $db->beginTransaction();
   //定義一個變量,來記錄sql受影響條數
   $rew = null;
   //拼寫sql語句
   $rew = $db->exec("update user set money = money-100 where id=1");
   //判斷付款人是否成功
   if(!$rew){
       throw new PDOException('您的賬戶餘額不足!');
    }
   $rew = $db->exec("update user set money = money+100 where id=2");
   //判斷接收人是否接受成功
   if(!$rew){
       throw new PDOException('對方賬號不存在,轉賬失敗!');
    }
   //提交事務
   $db->commit();
   echo "轉賬成功";
}catch(PDOException $content){
   //執行回滾
   $db->rollBack();
   exit($content->getMessage());
}

發佈了33 篇原創文章 · 獲贊 6 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章