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")默认关闭。
开始事务并执行操作
使用 BEGIN 或 START TRANSACTION 显式开启一个新事务(二者等价):
START TRANSACTION;INSERT INTO users(name, email) VALUES('Alice', 'alice@example.com');
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
此时修改尚未写入磁盘,其他会话不可见(取决于隔离级别),也未持久化。
采用HttpClient向服务器端action请求数据,当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。 实现Android与服务器端数据交互,我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,
提交或回滚事务
确认操作无误后,用 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 等操作意外中断。









