MySQL中单条语句是否以事务运行?含DML语句相关疑问
MySQL单条DML语句的事务特性说明
你的replace into语句的事务行为
replace into a(A,B,C,D,E) select * from b; 是作为单个原子事务执行的。replace操作的本质是先删除存在唯一键冲突的旧行,再插入新行,整个过程要么全部成功,要么因错误完全回滚,不会出现部分执行的情况。
单条DML语句的通用事务规则
在MySQL中,单条DML语句(INSERT/UPDATE/DELETE/REPLACE等)的事务特性取决于使用的存储引擎:
- 若使用支持事务的存储引擎(如InnoDB):所有单条DML语句都会被自动包裹在隐式事务中,具备原子性。执行过程中一旦出现错误(比如你遇到的唯一键冲突),整个语句的所有操作都会回滚,不会留下部分修改的数据。
- 若使用不支持事务的存储引擎(如MyISAM):单条DML语句没有事务特性,执行中出错时,已经完成的操作不会回滚,会导致数据部分修改的不一致状态。
另外补充:MySQL默认开启自动提交模式,多条独立的DML语句会各自作为单独事务提交;如果手动通过START TRANSACTION开启事务,后续多条语句会归为同一个事务,需手动执行COMMIT或ROLLBACK。
内容的提问来源于stack exchange,提问作者Jacky Guo
相关产品推荐
相关产品推荐

