MySQL默认开启自动提交(autocommit=1),每条DML语句独立成事务并立即提交;仅InnoDB等事务引擎支持该机制,MyISAM忽略设置;可通过SET autocommit=0临时关闭,但连接重连或执行BEGIN后行为易被误解。
MySQL自动提交机制,是指在默认状态下,每条独立的SQL语句(如INSERT、UPDATE、DELETE)都会被当作一个单独的事务立即执行并永久保存到数据库中,无需手动调用COMMIT。
当autocommit = ON(默认值为1)时:
START TRANSACTION或BEGIN,自动提交就暂时失效,后续操作进入手动事务控制流程。自动提交功能依赖事务支持能力:
autocommit逻辑;
效且不可回滚;autocommit也无实际意义。可通过系统变量实时查询和调整:
SHOW SESSION VARIABLES LIKE 'autocommit';
SHOW GLOBAL VARIABLES LIKE 'autocommit';
SET autocommit = 0;
SET autocommit = 1;
my.cnf中添加autocommit=0并重启。常见误解和实际原因:
BEGIN或START TRANSACTION后,即使autocommit=0也已进入事务模式,此时COMMIT/ROLLBACK才起作用;COMMIT来结束事务。