未完成DELETE命令即取消脚本,无事务时数据表行将如何变化?
问题场景
以下是一段PHP代码:
<?php $connection = mysqli_connect("...", "...", "...", "..."); mysqli_query($connection, "DELETE FROM POSTS WHERE USER_ID = 5");
假设上述DELETE命令需要13秒才能删除用户的所有帖子,但用户在6秒后取消了未完成的Delete.php脚本。在未使用MySQL事务的前提下,数据表中的用户帖子行将发生什么变化?
结论
因为未开启事务,且MySQL默认开启**自动提交(AUTOCOMMIT)**模式,单条DELETE语句执行过程中被中断时:
- 已经完成删除的符合条件的帖子行,会被永久删除,无法恢复
- 尚未被处理的符合条件的帖子行,会保留在数据表中
简单来说,最终数据表里会剩下一部分该用户的帖子,已经删掉的部分不会因为脚本中断而回滚。这是因为没有事务包裹时,MySQL会把DELETE执行过程中已完成的修改立即持久化,没有回滚的机制。
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

