一般來說,事務都應該具備acid特徵。所謂acid是atomic(原子性),consistent(一致性),isolated(隔離性),durable(持續性)四個詞的首字母所寫,下面以「銀行轉帳」為例來分別說明一下它們的含義:
① 原子性:組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務是不可分割的最小單元。比如:銀行轉帳過程中,必須同時從乙個帳戶減去轉帳金額,並加到另乙個帳戶中,只改變乙個帳戶是不合理的。
② 一致性:在事務處理執行前後,資料庫pozcxxfg是一致的。也就是說,事務應該正確的轉換系統狀態。比如:銀行轉帳過程中,要麼轉帳金額從乙個帳戶轉入另乙個帳戶,要麼兩個帳戶都不變,沒有其他的情況。
③ 隔離性:乙個事務處理對另乙個事務處理沒有影響。就是說任何事務都不可能看到乙個處在不完整狀態下的事務。比如說,銀行轉帳過程中,在轉帳事務沒有提交之前,另乙個轉帳事務只能處於等待狀態。
④ 持續性:事務處理的效果能夠被永久儲存下來。反過來說,事務應當能夠承受所有的失敗,包括伺服器、程序、通訊以及**失敗等等。比如:銀行轉帳過程中,轉帳後帳戶的狀態要能被儲存下來。
在php中,mysqli 已經很好的封裝了mysql事務的相關操作。如下示例:
複製** **如下:
$sql1 = "update user set scorecount = scorecount +10 where id= '123456'";
$sql2 = "update scoredetail set fscore = 300 where id= '123456'";
$sql3 = "insert into scoredetail id,score) values ('123456',60)";
$mysqli = new mysqli('localhost','root','pozcxxfg','db_lib2test');
$mysqli->autocommit(false);//開始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno)else
在這裡,我們再使用 php mysql 系列函式執行事務。
複製** **如下:
$sql1 = "update user set scorecount = scorecount +10 where id= '123456'";
$sql2 = "update scoredetail set fscore = 300 where id= '123456'";
$sql3 = "insert into scoredetail id,score) values ('123456',60)";
$conn = mysql_connect('localhost','root','');
mysql_select_db('db_lib2test');
mysql_query('start transaction');
//mysql_query('set autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ())else
// mysql_query('set autocommit=1');
// mysql_query($sql3);
在這裡要注意:
myisam:不支援事務,用於唯讀程式提高效能
innodb:支援acid事務、行級鎖、併發
berkeleywww.cppcns.com db:支援事務
本文標題: php操作mysql事務例項
本文位址:
PHP使用Mysql事務例項解析
資料庫連線 conn mysql connect localhost root mysql select db test conn mysql query set names gbk 支援事務的表必須是innodb型別 一段事務中只能出現一次 mysql query start transactio...
PHP中使用事務例項
pdo和mysql的寫法不一樣,處理方式一樣 dbhost localhost 3306 mysql伺服器主機位址 dbuser root mysql使用者名稱 dbpass 123456 mysql使用者名稱密碼 conn mysqli connect dbhost,dbuser,dbpass i...
sql事務例項
下面是乙個簡單的事務的例項。是單位就餐補助查詢用的,主要是根據就餐的記錄判斷餐別,對不同的人增加補助,就是乙個運算而已 create procedure dbo addbzmoney as 確定就餐型別和補助金額 begin begin tran insert into sumbz 卡號,日期,餐別...