如何提交事务_mysql commit用法

15次阅读

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

如何提交事务_mysql commit用法

mysql 中,COMMIT 用于提交当前事务,使事务中所有数据变更(如 INSERT、UPDATE、delete)永久生效。它必须配合事务控制语句使用,不能单独执行。

什么时候需要 COMMIT

MySQL 默认开启自动提交(autocommit=1),即每条 SQL 语句都会立即生效。只有当你显式开启事务(用 BEGINSTART 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 或断开连接。

text=ZqhQzanResources