如何从数据库中删除?

时间:2009-11-23 17:47:32

标签: mysql database-design sql-delete

我知道有两种方法可以从数据库表中删除数据

  • 永远删除
  • 使用isActive / isDeleted等标志

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

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

假设我在数据库中有多个表,我应该有一个只支持所有内容的常用函数并将其存储在另一个表中(可能是XML格式吗?)还是有其他方法。

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

7 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您可以使用isDeleted列并使用条件isDeleted = false来定义除了isDeleted之外的所有列的视图。然后让所有stps只适用于视图。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

… AND deleted = 0

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

答案 6 :(得分:0)

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