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());
}
mysql中的事務處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.