6

我知道从数据库表中删除数据的两种方法

  • 永远删除它
  • 使用像 isActive/isDeleted 这样的标志

现在 isActive 的问题是我必须在我的 SQL 查询中跟踪记录是否处于活动状态。但是,使用 DELETE 会永远删除数据。

备份这些数据的最佳方法是什么?

假设我在数据库中有多个表,我是否应该有一个通用函数来备份所有内容并将其存储在另一个表中(可能是 XML 格式?)还是有其他方法。

我正在使用 MySQL,但也对其他数据库中使用的技术感到好奇。

4

7 回答 7

13

将表格替换为隐藏非活动项目的视图。

或者在 DELETE 上编写一个触发器,将行备份到存档表。

于 2009-11-23T17:49:16.407 回答
2

您可以使用在删除记录时触发的触发器将它们备份到某种墓地表中。

于 2009-11-23T17:50:07.623 回答
2

您可以使用 isDeleted 列并定义一个视图,该视图选择除 isDeleted 之外的所有列,条件为 isDeleted=false。然后让您的所有 stps 仅适用于视图。

于 2009-11-23T17:50:47.247 回答
1

您可以维护一个历史表,在其中备份记录和时间戳

于 2009-11-23T17:51:20.290 回答
1

删除数据的最大原因之一是关系可能需要它 - 例如,用户可能决定从数据库中删除旧客户,但您仍然需要客户记录,因为旧发票引用了它(这可能有更长的寿命)。

基于此,最好的解决方案通常是“IsDeleted”类型的列,结合视图(Quassnoi 提到了分区,它可以帮助解决由于大量不可见数据而可能出现的性能问题)。

于 2009-11-23T18:09:59.830 回答
0

您可以在DELETED列上对表进行分区并定义包含条件的视图:

… AND deleted = 0

这将使对活动数据的查询同样简单有效。

于 2009-11-23T17:49:16.720 回答
0

好吧,如果您使用的是 SqlServer,您可以使用触发器,这将允许您将记录移动到已删除的表中。

于 2009-11-23T17:50:32.037 回答