MySQL事务不会自动回滚仅在显式开启且未提交时才可回滚默认autocommit1使每条SQL独立生效需手动BEGIN/START TRANSACTION并配合ROLLBACK或异常处理器如DECLARE EXIT HANDLER FOR SQLEXCEPTION才能确保出错回滚。事务自动回滚只发生在显式开启且未提交的场景MySQL 默认是自动提交autocommit1模式每条 SQL 都是一个独立事务执行完立刻生效根本不存在“回滚”一说。只有当你手动执行 START TRANSACTION 或 BEGIN或者把 autocommit 设为 0后续语句才会被纳入同一个事务上下文——这时才可能触发回滚。常见误解是“只要报错就自动回滚”其实不然比如在存储过程中执行一条 INSERT 报了 ERROR 1062 (23000): Duplicate entry若没做异常捕获事务仍处于活跃状态后续 COMMIT 会把前面成功的语句一起提交必须靠 ROLLBACK 或异常处理器干预。存储过程里用 DECLARE HANDLER 捕获错误再回滚在 CREATE PROCEDURE 中处理异常核心是声明错误处理器而不是依赖 MySQL 自动行为。需要明确指定错误类型SQLSTATE 或 MySQL 错误码并搭配 ROLLBACK 使用。DECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGIN ROLLBACK; RESIGNAL;END;注意点EXIT 表示触发后退出当前复合语句块适合放在事务体开头SQLEXCEPTION 覆盖大部分错误但不包括警告warning或 NOT FOUND如需捕获主键冲突可写 DECLARE ... FOR 1062RESIGNAL 重新抛出原错误避免静默失败若去掉调用方收不到错误信息务必确保 START TRANSACTION 在 HANDLER 声明之后、业务逻辑之前否则 handler 不生效应用层发起的事务必须由代码控制回滚时机PHP/Python/Java 等客户端通过连接执行 BEGIN 后MySQL 完全不感知你的业务逻辑是否成功。它只认你发来的 COMMIT 或 ROLLBACK 指令。典型疏漏 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。