我不小心从表中删除了一些大量的行......
我怎样才能回滚?
我使用PuTTY执行了查询。
如果你们中的任何人能指导我安全地离开这里,我将不胜感激......
如果您还没有进行备份,那么您几乎是捏造的。
如果您尚未提交事务,请尝试rollback
. 如果已提交事务(通过手动执行commit
或通过退出命令行客户端或选项autocommit
是1
默认值),则必须从上次备份中恢复数据。
为防止将来发生类似情况,请SET autocommit=0
在任何危险工作之前使用。任何更改都将保留在您当前的事务中,直到您提交它们。有关详细信息,请参阅https://dev.mysql.com/doc/refman/8.0/en/innodb-autocommit-commit-rollback.html
“回滚”仅在您使用transactions时才有效。这样,您可以将查询分组在一起,并在只有一个查询失败时撤消所有查询。
但是,如果您已经提交了事务(或使用了常规的 DELETE 查询),那么取回数据的唯一方法就是从以前的备份中恢复它。
BEGIN TRANSACTION
在开始查询之前使用该命令。这样你就可以ROLLBACK
在任何时间点做事。
例如:
接受的答案并不总是正确的。如果您在 MySQL 上配置二进制日志记录,您可以将数据库回滚到您仍然拥有快照和二进制日志的任何先前点。
7.5 使用二进制日志进行时间点(增量)恢复是了解此功能的一个很好的起点。
在 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;
如果要回滚数据,首先需要执行 autocommit =0,然后执行查询删除、插入或更新。
执行查询后执行回滚...
我还从我的开发数据库中删除了一些值,但我在 QA 数据库中有相同的副本,所以我做了一个生成脚本并将选项“脚本的数据类型”选择为“仅数据”并选择了我的表。
然后我得到了具有相同数据的插入语句,然后在我的开发数据库上运行脚本。
回滚通常不适用于这些删除功能,当然只有备份才能拯救您。
如果没有备份,则无法恢复它,因为删除查询在 PuTTY 上运行,一旦您触发删除查询,使用 .sql 文件的 Derby 将自动提交。
在 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