COMMIT用于提交显式开启的事务,使其中的DML操作永久生效;仅在autocommit=0或BEGIN/START TRANSACTION后需手动执行,否则无效或报错。

在 MySQL 中,COMMIT 用于提交当前事务,使事务中所有数据变更(如 INSERT、UPDATE、DELETE)永久生效。它必须配合事务控制语句使用,不能单独执行。
什么时候需要 COMMIT
MySQL 默认开启自动提交(autocommit=1),即每条 SQL 语句都会立即生效。只有当你显式开启事务(用 BEGIN 或 START TRANSACTION)后,才需要手动 COMMIT 来确认修改:
- 执行多条相关操作,希望它们“全成功或全失败”时(例如转账:扣款 + 入账)
- 需要临时测试修改效果,又不想立刻影响生产数据时
- 批量导入或复杂业务逻辑中需精确控制数据持久化时机
基本 COMMIT 用法
标准流程是:BEGIN → 执行 SQL → COMMIT(或 ROLLBACK):
BEGIN;
INSERT INTO users(name, age) VALUES('张三', 25);
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
COMMIT;执行 COMMIT 后,上述两条语句的更改才会写入磁盘并被其他会话可见。
注意事务边界和常见误区
以下情况会导致 COMMIT 失效或行为异常:
- 未开启事务就直接写 COMMIT —— MySQL 会提示 “No transaction in progress”
- 使用了不支持事务的存储引擎(如 MyISAM)—— COMMIT 不起作用,改用 InnoDB
- 连接断开或客户端异常退出 —— 未 COMMIT 的事务会被自动回滚
- 执行 DDL 语句(如 CREATE、ALTER、DROP)会隐式触发 COMMIT,导致之前未提交的 DML 一起提交
如何确认 autocommit 状态
运行以下命令查看当前会话是否自动提交:
SELECT @@autocommit;
返回 1 表示开启(默认),返回 0 表示关闭。可临时关闭:
SET autocommit = 0;
之后每条 DML 都需显式 COMMIT,直到再次设为 1 或断开连接。










