1.為什麼需要使用事務?
事務是單個的工作單元。如果某一事務成功,則在該事務中進行的所有資料修改均會提交,
成為資料庫中的永久組成部分。如果事務遇到錯誤且必須取消或復原,則所有資料修改均被清除。
事務使用,可以提供一個機制,防止在執行過程中出錯而之前正確的sql有影響了資料庫的情況出現;
交易處理機制在程式開發過程中有著非常重要的作用,它可以使整個系統更加安全,
例如在銀行處 理轉賬業務時,如果A賬戶中的金額剛被發出,而B賬戶還沒來得及接收就發生停電,
這會給銀行和個人帶來很大的經濟損失。採用交易處理機制,一旦在轉賬過程 中發生意外,則
程式將復原,不做任何處理。
2.MYSQL的交易處理主要有兩種方法
1.用begin,rollback,commit來實現 begin開始一個事務 rollback交易回復 commit 事務確認
2.直接用set來改變mysql的自動認可模式 mysql預設是自動認可的,也就是你提交一個query,就直接執行!可以通過 set autocommit = 0 禁止自動認可 set autocommit = 1 開啟自動認可 來實現事務的處理。
提示:但要注意當用set autocommit = 0 的時候,你以後所有的sql都將作為交易處理,直到你用commit確認或 rollback結束,注意當你結束這個事務的同時也開啟了新的事務!按第一種方法只將當前的做為一個事務!
3.mysql支援事務儲存引擎的選擇
MYSQL只有 INNODB和BDB類型的資料表才支援交易處理,其他的類型是不支援的! 事務都應該具備ACID特徵。所謂ACID是Atomic原子性),Consistent一致性),Isolated隔離性),Durable持久性)四個詞的首字母所寫原子性:組成交易處理的語句形成了一個邏輯單元,不能只執行其中的一部分。換句話說,事務是不可分割的最小單元。比如:銀行轉帳過程中,必須同時從一個帳戶減去轉帳金額,並加到另一個帳戶中,只改變一個帳戶是不合理的。
一致性:在交易處理執行前後,資料庫是一致的。也就是說,事務應該正確的轉換系統狀態。比如:銀行轉帳過程中,要麼轉帳金額從一個帳戶轉入另一個帳戶,要麼兩個帳戶都不變,沒有其他的情況。
隔離性:一個交易處理對另一個交易處理沒有影響。就是說任何事務都不可能看到一個處在不完整狀態下的事務。比如說,銀行轉帳過程中,在轉帳事務沒有提交之前,另一個轉帳事務只能處於等待狀態。
持久性:交易處理的效果能夠被永久儲存下來。反過來說,事務應當能夠承受所有的失敗,包括伺服器、進程、通訊以及媒體失敗等等。比如:銀行轉帳過程中,轉帳後帳戶的狀態要能被儲存下來。
4.事務的簡單的執行個體
<?php
$db = mysql_connect('localhost','root','') or die('連結失敗');//連結資料庫
mysql_select_db('test');//選擇資料庫
mysql_query("set autocommit = 0");//設定mysql不自動認可
mysql_query("begin");//設定事務的開始
//插入資料
$sql = "INSERT INTO `order` (`order_num`) VALUES ('1sadfsdfafasdfasdffffffffsd1111111')";
$sql2 = 'INSERT INTO `order` (`order_num`) VALUES ("1sadfsdfafasdfasdffffffffsd1111111")';
$q = mysql_query($sql);
$q2 = mysql_query($sql2);
if(!$q && !q2){
mysql_query("rollback");//執行復原
echo '執行失敗,資料復原';exit;
}
mysql_query("COMMIT");//提交事務
echo "成功";
mysql_close($db);
本文出自 “燭光照亮天堂-IT技術之路” 部落格,請務必保留此出處http://wuhai.blog.51cto.com/2023916/974994