我找不到问题的答案。我希望我不会重复。
所以,假设我有 10 行 row_parent_id = 3
。
mysql 在命令DELETE FROM table WHERE row_parent_id = 3
上有可能删除仅 9 行,因为...mysql 上出现错误?
如果是,如果可能发生某些错误并且查询将仅删除 9 行,那么这意味着我必须在任何删除操作之前计算行数?
如果不是,那么我可以信任mysql吗?
PS:我正在使用 PDO 和准备好的语句。我只是不明白删除之前是否有必要计算行数。我想确保按照我的要求删除所有行。
最佳答案
你要明白MySQL的InnoDB存储引擎支持atomic operations 。原子是指无法进一步 split ,而不是原子弹。
这意味着如果 DELETE 成功,则意味着它删除了所有匹配行。没有部分成功。如果它只删除了 9 行,则意味着您的事务中只有 9 条匹配的行可见。
在InnoDB中,如果DELETE被中断或遇到错误,则迄今为止删除的所有行都会自动恢复;没有一个被删除。
MyISAM 不支持原子操作。 DELETE 在处理要删除的行时可以被中断。因此,它删除的行可能比预期的要少,而且它们确实被删除了。无法回滚。
这是你不应该使用MyISAM的一个重要原因!
关于mysql - 我应该相信 mysql 会删除我询问的所有行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44752391/