如何在MySQL中回滚我的最后一个删除命令?

时间:2010-03-01 14:48:55

标签: mysql sql sql-delete rollback

我不小心从表中删除了大量的行...

我该如何回滚?

我使用PuTTY执行查询。

如果你们中的任何一个人能够安全地引导我走出这一点,我将不胜感激......

10 个答案:

答案 0 :(得分:92)

如果你还没有备份,你几乎就是捏造了。

答案 1 :(得分:28)

如果您尚未提交交易,请尝试rollback。如果您已经提交了事务(通过commit或退出命令行客户端),则必须从上次备份中恢复数据。

答案 2 :(得分:12)

“回滚”仅在您使用transactions时有效。这样,您可以将查询组合在一起并撤消所有查询(如果只有其中一个查询失败)。

但是如果你已经提交了事务(或者使用了常规的DELETE查询),那么获取数据的唯一方法就是从以前制作的备份中恢复它。

答案 3 :(得分:5)

在开始查询之前使用ROLLBACK命令。这样你就可以在任何时间点...

例如:

  1. 开始交易
  2. 从学生
  3. 中选择*
  4. 从学生中删除,其中Id = 2
  5. 从学生
  6. 中选择*
  7. 回滚
  8. 从学生
  9. 中选择*

答案 4 :(得分:3)

接受的答案并不总是正确的。如果在MySQL上配置二进制日志记录,则可以将数据库回滚到之前仍有快照和binlog的任何位置。

7.5 Point-in-Time (Incremental) Recovery Using the Binary Log 是了解此设施的良好起点。

答案 5 :(得分:2)

在MySQL中:

start transaction;

savepoint sp1;

delete from customer where ID=1;

savepoint sp2;

delete from customer where ID=2;

rollback to sp2;

rollback to sp1;

答案 6 :(得分:0)

如果您想要回滚数据,首先需要执行autocommit = 0然后执行查询删除,插入或更新。

执行查询后执行rollback ...

答案 7 :(得分:0)

我也从我的开发数据库中删除了一些值,但是我在QA数据库中有相同的副本,所以我做了一个生成脚本并选择了“脚本数据类型”到“仅数据”并选择了我的表。

然后我得到了包含相同数据的insert语句,然后在我的开发数据库上运行脚本。

答案 8 :(得分:-1)

回滚通常不适用于这些删除功能,当然备份只能保存您。

如果没有备份,则无法恢复它,因为在PuTTY上运行删除查询,一旦您触发删除查询,使用.sql文件的Derby会自动提交。

答案 9 :(得分:-1)

在Oracle中,这将是一个非问题:

SQL> delete from Employee where id = '01';

1 row deleted.

SQL> select id, last_name from Employee where id = '01';

no rows selected

SQL> rollback;

Rollback complete.

SQL> select * from Employee  where id = '01';

ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- ---------------
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer