58

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

我怎样才能回滚?

我使用PuTTY执行了查询。

如果你们中的任何人能指导我安全地离开这里,我将不胜感激......

4

10 回答 10

101

如果您还没有进行备份,那么您几乎是捏造的。

于 2010-03-01T14:50:57.087 回答
35

如果您尚未提交事务,请尝试rollback. 如果已提交事务(通过手动执行commit或通过退出命令行客户端或选项autocommit1默认值),则必须从上次备份中恢复数据。

为防止将来发生类似情况,请SET autocommit=0在任何危险工作之前使用。任何更改都将保留在您当前的事务中,直到您提交它们。有关详细信息,请参阅https://dev.mysql.com/doc/refman/8.0/en/innodb-autocommit-commit-rollback.html

于 2010-03-01T14:52:20.640 回答
13

“回滚”仅在您使用transactions时才有效。这样,您可以将查询分组在一起,并在只有一个查询失败时撤消所有查询。

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

于 2010-03-01T14:54:01.273 回答
7

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

例如:

  1. 开始交易
  2. 从学生中选择 *
  3. 从 Id=2 的学生中删除
  4. 从学生中选择 *
  5. 回滚
  6. 从学生中选择 *
于 2016-08-20T12:39:41.293 回答
4

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

7.5 使用二进制日志进行时间点(增量)恢复是了解此功能的一个很好的起点。

于 2015-02-16T16:57:22.577 回答
4

在 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;
于 2018-03-18T19:58:07.790 回答
0

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

执行查询后执行回滚...

于 2016-08-04T05:53:48.467 回答
0

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

然后我得到了具有相同数据的插入语句,然后在我的开发数据库上运行脚本。

于 2017-10-18T13:30:18.243 回答
-1

回滚通常不适用于这些删除功能,当然只有备份才能拯救您。

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

于 2013-08-21T11:30:23.487 回答
-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
于 2018-03-01T16:53:07.587 回答