1. DDL 在 MySQL 中的隐式提交,执行 CREATE TABLE 自动提交事务?
请说明 MySQL 中 DDL 的隐式提交行为,执行 CREATE TABLE 是否自动提交事务?
- MySQL 中 DDL 语句会隐式提交当前事务。
- CREATE TABLE、ALTER TABLE、DROP 等触发隐式提交。
- 无法回滚 DDL。
在 MySQL 中,DDL 语句(CREATE、ALTER、DROP、TRUNCATE 等)会触发隐式提交(implicit commit):执行 DDL 前,当前事务会被自动提交,DDL 本身也不可回滚。因此执行 CREATE TABLE 会自动提交当前事务,且 CREATE TABLE 成功后无法用 ROLLBACK 撤销。这是 MySQL 与 PostgreSQL 的重要差异(PostgreSQL 支持事务性 DDL,可回滚)。MySQL 隐式提交的后果:若在事务中执行 DDL,之前未提交的修改会被强制提交;DDL 出错不能回滚。因此迁移脚本需注意 DDL 的不可回滚性,分批执行或在 DDL 前显式提交。理解 MySQL 隐式提交是事务管理的重要细节。
MySQL 的 DDL 隐式提交使 DDL 不可回滚,且会强制提交当前事务。这是与 PostgreSQL 事务性 DDL 的核心差异。