繁体   English   中英

从数据库中恢复数据的最佳方法是什么?

[英]What is best way to recover data from database?

我有一个带有“客户”表的数据库。 我目前正在创建一个客户应用程序,管理员应该能够在其中创建/删除等客户。 所以我想要一个安全的,以防你错误地删除了一个客户。 我的问题是,如果客户被删除,恢复客户的最佳方式是什么?

我正在考虑只为已删除的客户提供一张自己的桌子,但不知道是否有其他方法可以实现这一目标。

一种方法是将boolean active列添加到客户表

create table Customers (
  firstname varchar(20),
  secondname varchar(20),
  active Boolean default true
);

然后当你 select 你的记录

select * from Customers where active = true;

然后,无需从客户表中删除条目,您只需将 active 设置为 false

使用“软删除”。 这意味着您实际上不会删除任何内容,而是在每一行上都有一个标志,您可以切换以显示客户未处于活动状态。 然后,您可以有一个视图,仅显示与取消删除无关的代码可以使用的未删除客户。

  1. 您应该进行数据库备份。

    备份是您的“第一道防线”——防止意外删除……以及任何其他可能发生的事情(例如,硬盘崩溃。或 meteor 崩溃。)。

  2. 另一种方法是将[触发器]分配给任何删除(或者,就此而言,也分配给“插入”和“更新”语句)。 您可以阻止删除(如果您愿意),并且您将记录谁试图删除。

    这是一个例子: http://rpbouman.blogspot.com/2011/10/mysql-hacks-preventing-deletion-of.html

  3. 最后,最好的方法可能是永远不要删除:只需创建一个新的“状态”列。 将初始值设置为“ACTIVE”,将“deleted”值设置为“DELETED”。

我完全同意@paulsm4 写的。

我还要补充一点,您可以考虑使用Hibernate Envers

Envers 将创建新表来记录审计表的变化 state。

一种方法是不实际删除客户并添加额外的状态列。 在业务层中,您将能够显示所有用户的状态。=已删除。

OBS:如果您确实需要从数据库中删除它们,您可以创建一个 cron 来扫描所有状态为已删除的客户,并在 x 天后将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM