步驟:
1.開啟事務 start transaction
當我們開啟乙個事務的時候,我們對sql的操作都發生在記憶體中,但是沒有真正的反饋到資料庫磁碟的檔案中!
2.回滾 rollback
回滾,就是恢復到事務開啟之前的最原始的狀態!
注意:回滾操作會自動的關閉乙個事務,如果想再次執行事務,需要重新開啟事務!
3.提交 commit
普通的執行,之所以是立即執行並生效,因為預設的,mysql對sql語句的執行是自動提交的!所以,開啟乙個事務的本質,就是關閉了以前的自動提交的功能,而是由使用者手動提交(利用commit語句)!
總結事務的步驟:
1, 開啟事務
2, 如果執行成功,就提交commit
3, 如果有任何一條sql語句執行失敗,則回滾rollback!
事務處理最典型的就是借還錢。下面以張三向李四還1000元為例
首先檢視資料庫中各自的錢數
下面是處理還錢事務的**:
<?php /**結果:* mysql實現事務操作
*/echo "";
//1 連線資料庫
$link = @mysql_connect('localhost','root','') or die('連線資料庫失敗');
mysql_select_db('test',$link
);mysql_query('set names utf8');
//2 開啟事務
mysql_query("start transaction");
//設定乙個變數,用來判斷所有sql語句是否成功
$flag = true;//
2.1執行事務中的一組sql語句
// 李四的money+1000
$sql = "update pdo set mone=money+1000 where name='李四'";
$res = mysql_query($sql
);if (!$res
) //
張三的money-1000
$sql = "update pdo set money=money-1000 where name='張三'";
$res = mysql_query($sql
);if (!$res
) //
2.2 判斷事務是否執行成功
if ($flag
) else
下面,我們故意把其中乙個字段寫錯,看看事務是否正常處理,資料庫中的錢數是否有變化!
//結果:李四的money+1000
$sql = "update pdo set mone=money+1000 where name='李四'"; //
把moeny欄位錯寫成mone
結果是還錢失敗,並且資料庫中各自的錢數沒有變化,說明當某一條語句未執行成功時,事物不會提交,而會回滾,把資料恢復到開始事務之前的原始狀態,這也是使用事務的作用,即只有當事務中所有sql語句全部執行成功,事務才會提交,否則會回滾!
下篇會介紹pdo中事務處理
mysql長事務的處理
1 排查業務端 1 業務是否確實需要使用長事務 比如 刪除不必要的唯讀事務。2 對使用長事務的 檢測是否有自動提交事務 可在mysql的general log中檢視是否開啟 注意 最好在業務功能測試時輸出general log,分析日誌行為提前發現問題。自動提交 setautocommit 1 檢視...
MYSQL的事務處理
transaction 1 conn mysql connect localhost root root or die 資料連線錯誤 mysql select db test conn mysql query set names gbk 使用gbk中文編碼 開始乙個事務 mysql query be...
MySQL的事務處理
mysql的事務處理,保證整個轉賬過程成功 張三欠李四500塊錢,現在需要張三向李四還款 mysql connect localhost root root or die 資料庫連線失敗 mysql query use test mysql select db test mysql query se...