設想網上購物的一次交易,其付款過程至少包括以下幾步資料庫操作: · 更新客戶所購商品的庫存資訊 · 儲存客戶付款資訊--可能包括與銀行系統的互動 · 生成訂單並且儲存到資料庫中 · 更新使用者相關資訊,例如購物數量等等 正常的情況下,這些操作將順利進行,最終交易成功,與交易相關的所有資料庫資訊也成功地更新。但是,如果在這一系列過程中任何乙個環節出了差錯,例如在更新商品庫存資訊時發生異常、該顧客銀行帳戶存款不足等,都將導致交易失敗。一旦交易失敗,資料庫中所有資訊都必須保持交易前的狀態不變,比如最後一步更新使用者資訊時失敗而導致交易失敗,那麼必須保證這筆失敗的交易不影響資料庫的狀態--庫存資訊沒有被更新、使用者也沒有付款,訂單也沒有生成。否則,資料庫的資訊將會一片混亂而不可**。
資料庫事務正是用來保證這種情況下交易的平穩性和可**性的技術。
/*mysql的事務處理主要有兩種方法。
1、用begin,rollback,commit來實現
begin 開始乙個事務
rollback 事務回滾
commit 事務確認
2、直接用set來改變mysql的自動提交模式
$conn = mysql_connect('localhost','root','root') or die ("資料連線錯誤!!!");
mysql_select_db('test',$conn);
mysql_query("set names 'gbk'"); //使用gbk中文編碼;
//開始乙個事務
mysql_query("begin"); //或者mysql_query("start transaction");
$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";
$sql2 = "insert into `user` (`did`, `username`, `***`) values (null, 'test1', '0')";//這條我故意寫錯
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1)else
mysql_query("end");
/**************** transaction--2 *******************/
/*方法二*/
mysql_query("set autocommit=0"); //設定mysql不自動提交,需自行用commit語句提交
$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";
$sql2 = "insert into `user` (`did`, `username`, `***`) values (null, 'test1', '0')";//這條我故意寫錯
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1)else
mysql_query("end"); //事務處理完時別忘記mysql_query("set autocommit=1");自動提交
/******************對於不支援事務的myisam引擎資料庫可以使用表鎖定的方法:********************/
//myisam & innodb 都支援,
/*lock tables可以鎖定用於當前執行緒的表。如果表被其它執行緒鎖定,則造成堵塞,直到可以獲取所有鎖定為止。
unlock tables可以釋放被當前執行緒保持的任何鎖定。當執行緒發布另乙個lock tables時,或當與伺服器的連線被關閉時,所有由當前執行緒鎖定的表被隱含地解鎖。
*/mysql_query("lock tables `user` write");//鎖住`user`表
$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";
$res = mysql_query($sql);
if($res)else
mysql_query("unlock tables");//解除鎖定
mysql儲存引擎 mysql儲存引擎簡介
精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...
mysql個儲存引擎 MySQL儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...
mysql儲存引擎模式 mysql儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...