MySQL 服务器支持事务,具体取决于使用的存储引擎。从 MySQL 5.5 开始,默认存储引擎是 InnoDB。InnoDB 具有完整的 ACID 事务支持。
事务可以通过 SQL 或 API 调用来控制。建议使用 API 调用来启用和禁用 autocommit
模式,以及提交和回滚事务。
示例 #1 使用 SQL 和 API 设置 autocommit
模式
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
/* 推荐:使用 API 控制事务设置 */
$mysqli->autocommit(false);
/* 不会被复制和负载平衡插件监控和识别 */
$mysqli->query('SET AUTOCOMMIT = 0');
可选的功能包,例如复制和负载平衡插件,可以轻松监控 API 调用。复制插件提供了事务感知负载平衡,如果使用 API 调用控制事务。如果使用 SQL 语句来设置 autocommit
模式、提交或回滚事务,则事务感知负载平衡不可用。
示例 #2 提交和回滚
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
请注意,MySQL 服务器无法回滚所有语句。某些语句会导致隐式提交。
参见