如何在mysql中提交事务_mysql事务提交操作

MySQL默认autocommit=1,每条SQL自动提交;手动事务需SET autocommit=0,再START TRANSACTION、执行操作、COMMIT/ROLLBACK;DDL等语句会触发隐式提交。

在 MySQL 中,事务提交是确保数据一致性的关键操作。默认情况下,MySQL 的 autocommit 模式是开启的(值为 1),这意味着每条 SQL 语句都会被自动当作一个独立事务执行并立即提交。要手动控制事务,必须先关闭 autocommit,再显式使用 COMMIT 提交。

确认并设置 autocommit 模式

执行以下命令查看当前 autocommit 状态:

SELECT @@autocommit;

若返回 1,表示自动提交已启用;需临时关闭才能手动管理事务:

SET autocommit = 0;

该设置仅对当前会话有效。也可在连接时通过客户端参数(如 MySQL Shell 的 --init-command="SET autocommit=0")默认关闭。

开始事务并执行操作

使用 BEGINSTART TRANSACTION 显式开启一个新事务(二者等价):

START TRANSACTION;
INSERT INTO users(name, email) VALUES('Alice', 'alice@example.com');
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;

此时修改尚未写入磁盘,其他会话不可见(取决于隔离级别),也未持久化。

提交或回滚事务

确认操作无误后,用 COMMIT 永久保存更改:

COMMIT;

若中途发现错误,可用 ROLLBACK 撤销所有未提交的修改:

ROLLBACK;

注意:一旦执行 COMMIT,就无法回滚;ROLLBACK 后事务结束,如需继续操作,必须重新 START TRANSACTION。

自动提交模式下的“隐式提交”

即使 autocommit=1,某些语句也会触发隐式提交,导致当前事务(如有)被自动结束,例如:

  • DDL 语句(CREATE、ALTER、DROP 表/库)
  • LOCK TABLES、UNLOCK TABLES
  • SET 语句修改会影响事务行为的系统变量(如 SET autocommit = 1)

因此,在 autocommit=1 时,不要依赖 BEGIN + COMMIT 组合——它会被 DDL 等操作意外中断。