PHP开发教程

MySQL事务

事务是数据库处理操作,其中执行就好像它是一个单一的一组有序的工作单元。换言之,事务将永远不会是完全的,除非在组内每个单独的操作是成功的。如果事务中的任何操作失败,整个事务将失败。

实际上,许多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)

可以使用其它类型的表 GEMINI 或 BDB, 但它取决于安装MySQL时,是否支持这两种类型。


Powered by PHP二次开发 ©2008-2017