mysql如何提交事务_mysql事务提交操作说明

P粉602998670
发布: 2025-12-18 00:03:19
原创
529人浏览过
MySQL事务提交需显式开启事务后执行COMMIT才生效;默认autocommit=1时单条语句自动提交,COMMIT无效;推荐用START TRANSACTION显式开启事务,确保DML操作在COMMIT前执行。

mysql如何提交事务_mysql事务提交操作说明

MySQL 中事务提交用 COMMIT 命令,必须在显式开启事务后执行才生效。 默认情况下 MySQL 处于自动提交模式(autocommit=1),单条 SQL 语句会立即持久化,此时 COMMIT 不起作用。要使用事务控制,需先关闭自动提交或用 BEGIN/START TRANSACTION 显式开启事务。

确认当前 autocommit 状态

执行以下命令查看是否处于自动提交模式:

SELECT @@autocommit;
登录后复制

返回 1 表示开启(默认),0 表示关闭。若为 1,后续的 COMMITROLLBACK 对单独语句无效。

显式开启事务并提交

推荐方式:不依赖 autocommit 设置,统一用显式事务块:

HIX Translate
HIX Translate

由 ChatGPT 提供支持的智能AI翻译器

HIX Translate 114
查看详情 HIX Translate
BEGIN;  -- 或 START TRANSACTION;
INSERT INTO users(name) VALUES('Alice');
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
登录后复制
  • BEGINSTART TRANSACTION 效果相同,建议用后者更标准
  • 所有 DML 操作(INSERT/UPDATE/DELETE)必须在 COMMIT 前执行
  • 执行 COMMIT 后,修改永久写入磁盘,不可回滚

临时关闭 autocommit 并手动提交

适用于需要连续多组事务操作的场景:

SET autocommit = 0;
INSERT INTO logs(msg) VALUES('start');
UPDATE config SET value = 'on' WHERE key = 'status';
COMMIT;  -- 必须显式提交
SET autocommit = 1;  -- 恢复默认
登录后复制
  • 设为 0 后,每条 DML 都处于未提交状态,直到遇到 COMMITROLLBACK
  • 连接断开或异常终止时,未提交的更改会自动回滚
  • 不建议长期保持 autocommit=0,容易遗忘提交导致锁表或数据不一致

提交失败的常见原因

COMMIT 本身极少报错,但可能因前置操作失败而无法达到预期效果:

  • 事务中某条语句报错(如主键冲突、外键约束失败),未捕获就直接 COMMIT → 实际只提交了前面成功的语句(非全部原子性)
  • 使用了不支持事务的存储引擎(如 MyISAM),COMMIT 无效果
  • 在存储过程中未启用事务上下文,或嵌套事务处理不当

确保表使用 InnoDB 引擎,并在应用层或存储过程中配合错误处理逻辑,必要时用 ROLLBACK 补救。

以上就是mysql如何提交事务_mysql事务提交操作说明的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号