mysql - 我应该相信 mysql 会删除我询问的所有行吗?

标签 mysql pdo prepared-statement sql-delete

我找不到问题的答案。我希望我不会重复。

所以,假设我有 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/

相关文章:

php - 将版主添加到论坛类别时没有模型 [App\Subreddit] 的查询结果

php - 如何动态添加到PHPExcel电子表格

php - 在现实世界中使用 PHP 进行数据库连接的示例 OOP

php - MYSQLi bind_result 返回空值

mysql - ZF - 使用 CASE WHEN 的 MySQL SUM 查询

php - 在mysql中建立三张表的查询

mysql日期显示为0000 :00:00 after importing from CSV

mysql - UNIX_TIMESTAMP 为空

php - 如何使用php PDO获取sqlite3中的第一行数据

java - 修改我的方法以使用PreparedStatement对象而不是Statement对象