mysql目前只有innodb和bdb兩個資料表型別才支援事務。建議用innodb表
create table employees(...) type=innodb;//使用type指定表型別為innodb
在預設情況下,mysql是以自動提交(autocommit)模式執行的,這就意味著所執行的每乙個語句都將立即寫入資料庫中。如果使用事務安全的**型別,是不希望有自動提交的行為的。要在當前的繪畫中關閉自動提交。
mysql>set autocommit=0;//在當前的會話中關閉自動提交
如果自動提交被開啟了,必須使用如下語句開始乙個事物,如果自動提交是關閉的,不需要使用這條命令,因為當輸入乙個sql語句時,乙個事務將自動啟動。
mysql>start transaction;//開啟乙個事務
在完成了一組事務的語句輸入後,可以使用如下所示語句將其提交給資料庫。只有提交了乙個事務,該事務才能在其他會話中被其他使用者所見
mysql>commit;//提交乙個事務給資料庫
如果改變主意,可以使用:
mysql>roolback;//事務將被回滾,所有操作都將被取消
如果需要乙個事務,那麼必須使用pdo物件中begintransaction()
方法來啟動乙個事務,可以使用pdo物件中的commit()
方法或rollback()
方法來結束該事務。
<?php
$pdo = new pdo("mysql:host=localhost;dbname=demo", "mysql_urer", "mysql_password");
$pdo->setattribute(pdo::attr_errmode, pdo::errmode_exception);//設定異常處理模式
$pdo->setattribute(pdo::attr_autocommit, 0); //關閉自動提交
try where name='usera'");//轉出
if($affected_rows>0)
echo
"usera成功轉出元人民幣
"; else
throw
new pdoexception('usera轉出失敗');//失敗丟擲異常,不再向下執行
$affected_rows = $pdo->exec("update account set cash=cash+ where name='userb'");//轉入
if($affected_rows>0)
echo
"成功向usreb轉入元人民幣
"; else
throw
new pdoexception('userb轉入失敗'); //失敗丟擲異常,不向下再執行,轉到catch區塊
echo
'交易成功!';
$pdo->commit();//如果執行到此處表示前面兩個查詢執行成功,整個事務執行成功
}catch(pdoexception $e)
$pdo->setattribute(pdo::attr_autocommit, 1);//重新開啟自動提交
php資料庫抽象層 PDO
下面就來介紹一下資料庫抽象層pdo的使用 pdo php data objects 是乙個輕量級的php擴充套件,提供了乙個資料訪問抽象層。還要就是pdo只能在php5.0以上版本使用。下面來介紹一下pdo常用的預定義常量 pdo param bool integer 表示布林資料型別 pdo pa...
資料庫抽象層 PDO
資料庫抽象層 在資料遷移和專案操作多資料庫時,為了便於操作而提供一種的解決方案。當從乙個資料庫系統向另乙個資料庫系統遷移時,幾乎不用更改太多的程式 如將ms sql server遷移到mysql。規劃必須規範,盡量使用相同的資料進行物件例項化,並且使用相同的資料庫抽象層 如pdo 這樣只需要改變系統...
PDO資料庫訪問抽象層
pdo建構函式說明 dsn資料來源名稱,包括主機名埠號和資料庫名稱 username資料庫使用者名稱 password 密碼 driver options連線資料庫的其他選項 pdo是比mysql更高效,資料庫遷移時基本不用更改太多的 sql語句 pdo exec 返回sql語句後受影響的行數 qu...