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 伺服器無法回滾所有陳述式。有些陳述式會導致隱含提交。
另請參閱