事务是数据库处理操作,其中执行就好像它是一个单一的一组有序的工作单元。换言之,事务将永远不会是完全的,除非在组内每个单独的操作是成功的。如果事务中的任何操作失败,整个事务将失败。
实际上,许多SQL查询组成到一个组,将执行所有这些一起作为事务的一部分。
事务性质
事务具有以下四个标准属性,通常由首字母缩写ACID简称:
-
原子性: 确保了工作单位中的所有操作都成功完成; 否则,事务被中止,在失败时会被回滚到事务操作以前的状态。
-
一致性:可确保数据库在正确的更改状态在一个成功提交事务。
-
隔离: 使事务相互独立地操作。
-
持久性: 确保了提交事务的结果或系统故障情况下仍然存在作用。
在MySQL中,事务以BEGIN WORK语句开始开始工作,并使用COMMIT或ROLLBACK语句结束。SQL命令在开始和结束语句之间构成大量事务。
提交和回滚
这两个关键字 Commit 和 Rollback 主要用于MySQL的事务。
-
当一个成功的事务完成后,COMMIT 命令发出的变化对所有涉及的表将生效。
-
如果发生故障,ROLLBACK命令发出后,事务中引用的每个表将恢复到事务开始之前的状态。
可以通过设置AUTOCOMMIT这个会话变量控制事务的行为。如果AUTOCOMMIT设置为1(默认值),那么每个SQL语句(在事务或不在事务)被认为是一个完整的事务并提交,在默认情况下是在当它完成时。当AUTOCOMMIT设置为0,通过发出SET AUTOCOMMIT=0命令, 随后的一系列语句就像一个事务,但并没有任何活动被提交直到一个明确的发出 COMMIT 语句。
可以通过使用PHP 的 mysql_query()函数执行这些SQL命令。
关于事务通用示例
此事件序列是独立于所使用的编程语言; 逻辑路径可以是任何编程语言,使用它在创建应用程序中创建。
可以通过使用 mysql_query()函数执行这些PHP SQL命令
-
开始事务是通过发出SQL命令BEGIN WORK
-
类似发出的一个或多个SQL命令 SELECT, INSERT, UPDATE 或 DELETE.
-
根据要求,检查是否有任何错误
-
如果有错误,发出ROLLBACK命令,否则执行COMMIT命令。
在MySQL的事务安全表类型
不能直接使用事务,可以使用但它们没有安全保障。如果打算使用事务在MySQL编程,那么需要使用一个特殊的方式来创建表。 有许多类型的表其支持事务,但目前最流行的一种是:InnoDB.
支持InnoDB表需要特定的编译参数,在源代码编译MySQL时。如果MySQL版本不支持InnoDB,得要求互联网服务提供商建立一个版本的MySQL的InnoDB表类型的支持,或 下载并安装MySQL-Max二进制分发的Windows版本,或者Linux/UNIX开发环境中工作的表类型。
如果你的MySQL安装支持InnoDB表,简直就是一个TYPE= InnoDB的定义添加到表创建语句后面。例如,下面的代码创建一个名为 tcount_tbl 的 InnoDB 类型表:
root@host# mysql -u root -p password; Enter password: mysql> use test; 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)
请检查下面的链接了解更多有关: InnoDB
可以使用其它类型的表 GEMINI 或 BDB, 但它取决于安装MySQL时,是否支持这两种类型。