1

如果我在 mysql 中写 delete * from tablename ,所有行都会删除它以任何方式将数据返回到该表中的 mysql

4

4 回答 4

3

不,没有。

正确的查询是DELETE FROM tablename. (没有*

于 2010-07-27T12:17:44.583 回答
2

从备份中恢复。

于 2010-07-27T12:17:59.513 回答
1

取决于,取决于,取决于。

我假设你没有备份。如果您这样做,最好从备份中恢复表,如前所述。

如果表是 MyISAM ,那么答案是 NO 而不是 YES。问题是 MyISAM 以块的形式存储数据。正常块的头是 3 或 4 个字节。被删除块的头部是 20 字节。因此,即使您从 MYD 文件中提取记录,第一列(在大多数情况下是您的 PK)也将被覆盖。从 MYD 文件中提取记录几乎是不可能的。

如果是 InnoDB,机会要高得多。如果 MySQL 在事故发生后立即停止/杀死,那么机会太接近 100%。InnoDB 不会立即删除。它将记录标记为已删除,并在 InnoDB 重建 B+树索引时物理清除记录(读取 - 当您插入新记录时)。所以,你有一些时间。在这种情况下,你要做的第一件事就是立即停止 MySQL,或者优雅地或者 kill -9。

我不知道我是否可以在此处插入 URL。谷歌 percona 数据恢复工具,从主干获取最新版本并查看 mysqlperformance 博客(再次,谷歌它)的食谱。

祝你好运。

更新:数据恢复工具包移至GitHub

于 2014-02-10T21:15:53.483 回答
0

最简单的方法是恢复您的最新备份。

于 2010-07-27T12:18:43.727 回答