MySQLi - 事务

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

实际上,您会将许多 SQL 查询组合到一个组中,并将所有这些查询作为事务的一部分一起执行。

事务的属性

事务具有以下四个标准属性,通常由缩写 ACID 表示 −

  • 原子性 − 确保工作单位内的所有操作顺利完成; 否则,事务将在失败时中止,并且之前的操作将回滚到之前的状态。

  • 一致性 − 确保数据库在成功提交事务后正确更改状态。

  • 隔离性 − 使事务能够独立运行且彼此透明。

  • 耐用性 − 确保已提交事务的结果或效果在系统发生故障时仍然存在。

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

提交和回滚

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

  • 当事务成功完成时,应发出 COMMIT 命令,以便对所有涉及的表所做的更改生效。

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

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

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

事务的通用示例

该事件序列与所使用的编程语言无关; 可以使用您用来创建应用程序的任何语言来创建逻辑路径。

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

  • 通过发出 SQL 命令BEGIN WORK 开始事务。

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

  • 检查是否没有错误,一切是否符合您的要求。

  • 如果有任何错误,则发出 ROLLBACK 命令,否则发出 COMMIT 命令。

MySQL 中的事务安全表类型

您不能直接使用事务,可以,但它们不会安全且有保证。 如果您计划在 MySQL 编程中使用事务,那么您需要以特殊的方式创建表。 支持事务的表有很多种,但最流行的一种是InnoDB

从源代码编译 MySQL 时,对 InnoDB 表的支持需要特定的编译参数。 如果您的 MySQL 版本不支持 InnoDB,请要求您的 Internet 服务提供商构建支持 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,但这取决于您的安装是否支持这两种类型。