- MySQLi 教程
- MySQLi - 首页
- MySQLi - 简介
- MySQLi - PHP 语法
- MySQLi - 连接
- MySQLi - 创建数据库
- MySQLi - 删除数据库
- MySQLi - 选择数据库
- MySQLi - 创建表
- MySQLi - 删除表
- MySQLi - 插入查询
- MySQLi - 选择查询
- MySQLi - Where 子句
- MySQLi - 更新查询
- MySQLi - 删除查询
- MySQLi - Like 子句
- MySQLi - 排序结果
- MySQLi - 使用连接
- MySQLi - 处理 NULL 值
- 获取和使用 MySQLi 元数据
- MySQL
- MySQL - 安装
- MySQL - 管理
- MySQL - 数据类型
- MySQL - 正则表达式
- MySQL - 事务
- MySQL - Alter 命令
- MySQL - 索引
- MySQL - 临时表
- MySQL - 克隆表
- MySQL - 使用序列
- MySQL - 处理重复数据
- MySQLi 有用资源
- MySQLi - 有用函数
- MySQLi - 快速指南
- MySQLi - 有用资源
- MySQLi - 讨论
MySQLi - 事务
事务是一系列数据库操作的顺序组,它被执行得好像是一个单独的工作单元。换句话说,除非组中的每个单独操作都成功,否则事务永远不会完成。如果事务中的任何操作失败,则整个事务将失败。
实际上,您将许多 SQL 查询组合成一个组,并将它们全部一起执行作为事务的一部分。
事务的特性
事务具有以下四个标准特性,通常用首字母缩写词 ACID 来表示:
原子性 - 确保工作单元中的所有操作都成功完成;否则,事务将在失败点中止,并且先前操作将回滚到其以前的状态。
一致性 - 确保数据库在成功提交的事务后正确更改状态。
隔离性 - 使事务能够独立于彼此并且对彼此透明地运行。
持久性 - 确保已提交事务的结果或效果在系统故障的情况下仍然存在。
在 MySQL 中,事务以语句 BEGIN WORK 开始,并以 COMMIT 或 ROLLBACK 语句结束。BEGIN 和 END 语句之间的 SQLi 命令构成事务的主体。
COMMIT 和 ROLLBACK
这两个关键字Commit 和Rollback 主要用于 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。
对 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
您可以使用其他表类型,例如GEMINI 或BDB,但这取决于您的安装是否支持这两种类型。