標籤:
有一張銀行帳號表
create table account(id int primary key,balance float); 現在有一段php程式, 要完成 把 1號 10 元錢,轉到 2號帳號上
事務基本:事務用於保證資料的一致性,它由一組相關的dml語句組成,該組的dml語句要麼全部成功,要麼全部失敗。如:網上轉賬就是典型的要用事務來處理,用以保證資料的一致性 現在我們使用事務來完成上面的代碼 代碼:
1 <?php 2 3 $mysqli=new MySQLi("localhost","root","hsp123","test"); 4 if($mysqli->connect_error){ 5 6 die($mysqli->connect_error); 7 } 8 9 //將提交設為false[事務一旦提交就沒有機會復原10 $mysqli->autocommit(false);11 //-> savepoint a;會把但前情況記錄12 $sql1="update account set balance=balance-2 where id=1";13 $sql2="update account2 set balance=balance+2 where id=2";14 $b1=$mysqli->query($sql1) ;15 $b2=$mysqli->query($sql2) ;16 17 if(!$b1||!$b2){18 echo "失敗,復原".$mysqli->error;19 //復原!20 $mysqli->rollback();21 }else{22 //提交[一旦提交沒有機會復原23 $mysqli->commit();24 }25 $mysqli->close();26 //顯示控制台27 ?>
? 在mysql控制台可以使用事務來操作,具體步驟如下
1. 開啟一個事務start transaction2. 做儲存點savepoint 儲存點名稱 3. 操作....4. 可以復原,可以提交4.1 如果沒有問題提交commit4.2 如果你覺得有問題,就復原rollback to 儲存點. 事務的acid特性原子性,一致性,持久性,隔離性.
mysql交易處理