Mysqli 简明教程

MySQLi - Transactions

事务是一组顺序的数据库操作,执行时就好像它是单个工作单元一样。换句话说,除非组内的每个操作都成功,否则事务永远不会完成。如果事务中的任何操作失败,整个事务都将失败。

实际上,你会将许多 SQL 查询组合到一个组中,并将它们全部作为事务的一部分一起执行。

Properties of Transactions

事务具有以下四个标准属性,通常用首字母缩写词 ACID 提到 -

  1. Atomicity − 确保工作单元中的所有操​​作都已成功完成;否则,事务将中止在失败点,并且以前的操​​作将回滚到其先前状态。

  2. Consistency - 确保在成功提交事务后数据库正确更改状态。

  3. Isolation − 允许事务独立且透明地相互操作。

  4. Durability - 确保已提交事务的结果或影响在系统故障的情况下持续存在。

在 MySQL 中,事务以 BEGIN WORK 语句开始,并以 COMMIT 或 ROLLBACK 语句结束。开始和结束语句之间的 SQLi 命令形成事务的主体。

COMMIT and ROLLBACK

这两个关键字 CommitRollback 主要用于 MySQL 事务。

  1. 当成功完成一个事务时,应当发出 COMMIT 命令,以使对所有相关的表所作的更改生效。

  2. 如果发生故障,应当发出 ROLLBACK 命令,以使事务中引用的每个表返回到其之前的状态。

你可以通过设置名为 AUTOCOMMIT 的会话变量来控制事务的行为。如果 AUTOCOMMIT 设置为 1(默认),则每个 SQL 语句(在事务中或不在事务中)都被视为一个完整的事务,并在完成后默认提交。当 AUTOCOMMIT 设置为 0,即发出 SET AUTOCOMMIT=0 命令时,后续一系列语句就像一个事务,并且在发出显式 COMMIT 语句之前不会提交任何活动。

你可以使用 mysqli_query() 函数在 PHP 中执行这些 SQL 命令。

Generic Example on Transaction

这个事件序列与所使用的编程语言无关;逻辑路径可以在用于创建应用程序的任何语言中创建。

你可以使用 mysqli_query() 函数在 PHP 中执行这些 SQL 命令。

  1. 通过发出 SQL 命令 BEGIN WORK. 开始事务

  2. 发出一个或多个 SQL 命令,例如 SELECT、INSERT、UPDATE 或 DELETE。

  3. 检查是否存在错误并确保一切符合你的要求。

  4. 如果出现任何错误,则发出 ROLLBACK 命令,否则发出 COMMIT 命令。

Transaction-Safe Table Types in MySQL

你不能直接使用事务,你可以使用它们,但它们并不安全且不能保证。如果你计划在 MySQL 编程中使用事务,则需要以特殊的方式创建表。有许多类型的表格支持事务,但最受欢迎的表格是 InnoDB

对 InnoDB 表的支持要求从源代码编译 MySQL 时使用一个特定的编译参数。如果你的 MySQL 版本不支持 InnoDB,请让你的互联网服务提供商构建一个支持 InnoDB 表类型的 MySQL 版本或下载并安装适用于 Windows 或 Linux/UNIX 的 MySQL-Max 二进制分发并使用开发环境中的表类型工作。

如果你的 MySQL 安装支持 InnoDB 表,只需向表创建语句中添加一个 TYPE = InnoDB 定义即可。例如,以下代码创建一个名为 tutorials_innodb 的 InnoDB 表 -

root@host# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   → (
   → tutorial_author varchar(40) NOT NULL,
   → tutorial_count  INT
   → ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

查看以下链接以了解更多信息 - InnoDB

您可以使用其他表类型,如 GEMINIBDB ,但它取决于您的安装是否支持这两种类型。