MySQL事务机制与PHP实战操作指南

远山来客
远山来客
发布时间:2026-10-14| 4人浏览过
原创

MySQL中只有InnoDB类型的数据表才能支持事务处理。本文详解如何利用BEGIN、ROLLBACK和COMMIT命令手动管理事务,以及如何通过修改AUTOCOMMIT参数调整自动提交模式,并结合PHP代码示例展示数据操作的一致性保障。

InnoDB与事务支持

在MySQL数据库中,并非所有存储引擎都支持事务。事务(Transaction)是一系列必须作为一个整体执行的操作,要么全部成功,要么全部失败。目前MySQL中只有 InnoDB 类型的存储引擎完整支持ACID特性(原子性、一致性、隔离性、持久性)。若使用其他引擎(如MyISAM),则无法启用真正的回滚功能。

启动事务的两种方法

第1步:使用BEGIN、ROLLBACK、COMMIT语句控制

这是最直观的事务控制方式。通过显式语句开始事务,根据后续操作结果决定是确认提交还是回滚撤销。

  • BEGIN 或 START TRANSACTION:标志着一个新事务的开始。
  • COMMIT:事务中的所有操作将永久保存到数据库。
  • ROLLBACK:撤销事务中所有未保存的数据更改,恢复至事务开始前状态。
BEGIN;
-- 执行SQL操作...
ROLLBACK; -- 或 COMMIT;

第2步:修改会话的自动提交模式

MySQL默认处于自动提交模式,即每条SQL语句执行完毕后立即自动提交为事务。可以通过 SET AUTOCOMMIT 临时改变这一行为。

  • SET AUTOCOMMIT=0:禁用自动提交。此后执行的SQL操作将保留在当前事务中,直到遇到 COMMIT 或 ROLLBACK。
  • SET AUTOCOMMIT=1:开启自动提交(默认状态)。
SET AUTOCOMMIT = 0;

注意:手动设置后需记得在脚本结束时恢复默认值或显式提交,以免长连接导致资源占用或数据不一致。

PHP中的事务实战应用

以下示例展示了如何在PHP中使用MySQL扩展库进行事务操作。场景为向表中插入两条记录,若任意一条失败,则整个事务回滚。

注意事项:原文使用的 mysql_* 函数系列已在PHP 5.5中弃用,并在PHP 7.0中移除。实际生产环境中推荐使用 PDO 或 mysqli 扩展。此处仅作逻辑演示,保持原文意图。

<?php
// 假设已建立连接
$conn = mysql_connect("localhost", "root", "") or die("数据库连接失败");
mysql_select_db("test", $conn);
mysql_query("SET NAMES utf8");

// 关键:关闭自动提交,确保后续操作属于同一事务
mysql_query("SET AUTOCOMMIT=0", $conn);

$sql1 = "INSERT INTO test(id, name) VALUES ('2222', '测试数据')";
$sql2 = "INSERT INTO test(id, name, age) VALUES ('111', 'sss', '22')"; 
// 注:此处刻意构造可能报错的SQL以模拟异常

$res1 = mysql_query($sql1, $conn);
$res2 = mysql_query($sql2, $conn);

if ($res1 && $res2) {
    // 所有操作成功,提交事务
    mysql_query("COMMIT", $conn);
    echo "事务提交成功";
} else {
    // 任一操作失败,回滚事务
    mysql_query("ROLLBACK", $conn);
    echo "操作失败,事务已回滚";
}

// 恢复自动提交
mysql_query("SET AUTOCOMMIT=1", $conn);
?>

完成判断与维护建议

事务成功的标志是业务逻辑中的所有原子操作均无错误返回,且最终调用了 COMMIT。若中途发生异常且未捕获,需依靠 ROLLBACK 清理状态。 排查提示:如果事务未按预期工作,请首先检查表是否使用了 InnoDB 引擎;其次检查是否忘记关闭 AUTOCOMMIT 或未正确调用 COMMIT。
以上就是基于MySQL事务机制、视图、存储过程及触发器应用的详细内容,更多关于SQL高级技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。