事務(wù)就是一組連續(xù)的數(shù)據(jù)庫操作,執(zhí)行起來仿佛像是單一的工作單元。換句話說,除非該組內(nèi)所有操作都成功完成,否則事務(wù)永遠(yuǎn)不會結(jié)束。如果事務(wù)中的某一個操作失敗,則整個事務(wù)也將失敗。
實際上,將在一個組中結(jié)合許多 SQL 查詢,你將同時執(zhí)行所有的事務(wù),作為事務(wù)的一部分。
事務(wù)一般具有以下4種典型特點,人們通常會用這4種特點的英文首字母縮寫組合詞 ACID 來表示。
在 MySQL 中,事務(wù)通常以 BEGIN WORK 語句開始,以 COMMIT 或 ROLLBACK(只取其一) 語句結(jié)束。在開始與結(jié)束聲明之間的 SQL 命令就構(gòu)成了事務(wù)的主體。
MySQL事務(wù)主要用到兩個關(guān)鍵字 COMMIT 與 ROLLBACK:
通過設(shè)定會話變量 AUTOCOMMIT 可以控制事務(wù)行為。如果 AUTOCOMMIT 被設(shè)為1(默認(rèn)值),則每一個 SQL 語句(無論是否在事務(wù)中)都會被認(rèn)為是一個完成的事務(wù),則默認(rèn)當(dāng)它結(jié)束時予以提交。當(dāng) AUTOCOMMIT 被設(shè)為0(通過命令 SET AUTOCOMMIT=0)時,后續(xù)一系列語句就像是一個事務(wù),直到 COMMIT 語句執(zhí)行為止,不再提交任何行為。
可以在 PHP 中利用 mysql_query()執(zhí)行 SQL 命令。
這些事件都跟所用的編程語言無關(guān)。邏輯路徑可以用你所使用的任何語言來創(chuàng)建。
可以在 PHP 中利用 mysql_query()執(zhí)行 SQL 命令。
通過執(zhí)行 SQL 命令 BEGIN WORK 可開啟事務(wù)。
執(zhí)行一個或更多的如下 SQL 命令:SELECT、INSERT、UPDATE 或 DELETE。
檢查是否有錯,一切是否符合要求。
不能直接使用事務(wù),如果強(qiáng)行使用,則無法保證它們的安全性。如果打算在 MySQL 編程中使用事務(wù),就需要以特殊的方式來創(chuàng)建表。有很多種支持事務(wù)表可供選擇,但其中最常見的是 InnoDB。
對 InnoDB 表的支持,需要在編譯 MySQL 源碼時用到一個特殊的編譯參數(shù)。如果 MySQL 版本不支持 InnoDB,則需要請你的 ISP 構(gòu)建一個支持 InnoDB 表類型的 MySQL 版本,或者下載安裝一個用于 Windows 或 Linux/UNIX 系統(tǒng)的 MySQL-Max 二進(jìn)制分發(fā)版,在其開發(fā)環(huán)境中使用這種表類型。
如果你的 MySQL 版本支持 InnoDB 表,則只需在表創(chuàng)建語句中添加一個 TYPE = InnoDB 定義即可。比如,下面這段代碼就創(chuàng)建了一個叫做 tcount_tbl 的 InnoDB 表。
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)
有關(guān)InnoDB的詳細(xì)信息,可參看這個鏈接:
如果你的 MySQL 支持 GEMINI 或 BDB 這兩種表類型,也可以使用它們。