从mysql中的表中删除行

时间:2010-07-27 12:14:38

标签: mysql data-recovery

如果我从mysql中的tablename写下delete *,那么所有行都会删除它,以便在该表中的mysql中获取数据

4 个答案:

答案 0 :(得分:2)

不,没有。

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

答案 1 :(得分:2)

从备份恢复。

答案 2 :(得分:1)

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

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

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

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

我不知道我是否可以在此处插入网址。谷歌percona数据恢复工具,从主干采取最新的修订,并检查mysqlperformance博客(再次,谷歌)的食谱。

祝你好运。

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

答案 3 :(得分:0)

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