【发布时间】:2011-01-22 07:54:54
【问题描述】:
【问题讨论】:
-
虽然可能已经晚了,但也请查看 Phil 关于二进制日志记录的答案。
标签: mysql sql sql-delete rollback
【问题讨论】:
标签: mysql sql sql-delete rollback
如果你还没有进行备份,那你就被蒙骗了。
【讨论】:
commit 以来的所有查询的方式,对吧? rollback?
如果您尚未提交事务,请尝试rollback。如果您已经提交了交易(通过手动执行commit或通过退出命令行客户端或autocommit 987654325 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 Point-in-Time (Incremental) Recovery Using the Binary Log 是了解该设施的良好起点。
【讨论】:
在 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 数据库中有相同的副本,所以我做了一个生成脚本并将选项“脚本的数据类型”选择为“仅数据”并选择了我的表。
然后我得到具有相同数据的插入语句,然后在我的开发数据库上运行脚本。
【讨论】:
在 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
【讨论】:
回滚通常不适用于这些删除功能,当然只有备份才能救你。
如果没有备份,则无法恢复它,因为删除查询在 PuTTY 上运行,使用 .sql 文件的 Derby 会在您触发删除查询后自动提交。
【讨论】: