Mysqli 简明教程
MySQLi - Transactions
事务是一组顺序的数据库操作,执行时就好像它是单个工作单元一样。换句话说,除非组内的每个操作都成功,否则事务永远不会完成。如果事务中的任何操作失败,整个事务都将失败。
实际上,你会将许多 SQL 查询组合到一个组中,并将它们全部作为事务的一部分一起执行。
Properties of Transactions
事务具有以下四个标准属性,通常用首字母缩写词 ACID 提到 -
-
Atomicity − 确保工作单元中的所有操作都已成功完成;否则,事务将中止在失败点,并且以前的操作将回滚到其先前状态。
-
Consistency - 确保在成功提交事务后数据库正确更改状态。
-
Isolation − 允许事务独立且透明地相互操作。
-
Durability - 确保已提交事务的结果或影响在系统故障的情况下持续存在。
在 MySQL 中,事务以 BEGIN WORK 语句开始,并以 COMMIT 或 ROLLBACK 语句结束。开始和结束语句之间的 SQLi 命令形成事务的主体。
COMMIT and ROLLBACK
这两个关键字 Commit 和 Rollback 主要用于 MySQL 事务。
-
当成功完成一个事务时,应当发出 COMMIT 命令,以使对所有相关的表所作的更改生效。
-
如果发生故障,应当发出 ROLLBACK 命令,以使事务中引用的每个表返回到其之前的状态。
你可以通过设置名为 AUTOCOMMIT 的会话变量来控制事务的行为。如果 AUTOCOMMIT 设置为 1(默认),则每个 SQL 语句(在事务中或不在事务中)都被视为一个完整的事务,并在完成后默认提交。当 AUTOCOMMIT 设置为 0,即发出 SET AUTOCOMMIT=0 命令时,后续一系列语句就像一个事务,并且在发出显式 COMMIT 语句之前不会提交任何活动。
你可以使用 mysqli_query() 函数在 PHP 中执行这些 SQL 命令。
Generic Example on Transaction
这个事件序列与所使用的编程语言无关;逻辑路径可以在用于创建应用程序的任何语言中创建。
你可以使用 mysqli_query() 函数在 PHP 中执行这些 SQL 命令。
-
通过发出 SQL 命令 BEGIN WORK. 开始事务
-
发出一个或多个 SQL 命令,例如 SELECT、INSERT、UPDATE 或 DELETE。
-
检查是否存在错误并确保一切符合你的要求。
-
如果出现任何错误,则发出 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
您可以使用其他表类型,如 GEMINI 或 BDB ,但它取决于您的安装是否支持这两种类型。