在真正的mysql系统中处理DELETE的最佳方法

时间:2017-01-09 14:57:24

标签: java mysql spring server

我正在使用Spring Boot + mySql

开发一个Web项目

我在考虑如何从数据库中删除数据。

我知道DELETE * FROM表语句,但我有疑问,

  1. 有没有办法使用DELETE保留历史记录或操作日志?
  2. 如果我使用DELETE删除数据,那么我添加一个新数据,新数据将插入到已删除的地方,因此ID错误订购了吗?
  3. 我的朋友建议我为每个表添加一个BOOL列,这是删除标志,为了控制删除过程,这是一个很好的方法吗?

    对不起,我是服务器开发的新手,所以我想确保每一步都很健壮。提前谢谢。

2 个答案:

答案 0 :(得分:1)

  

有没有办法使用DELETE保留历史记录或操作日志?

您可以通过在日志文件中跟踪这些操作或在数据库上设置触发器来跟踪每个删除操作(例如,将创建新表中的新记录)。我个人更喜欢使用日志文件,所以你可以用几种类型配置你的日志框架(或者通过保存在数据库上,或者在日志文件中,或者使用syslog等...)

  

如果我使用DELETE删除数据,那么我添加一个新数据,即新数据   将插入已删除的位置,因此ID被错误排序   正确?

没有;新记录将有自己的ID

  

我的朋友建议我在每个表中添加一个BOOL列   删除标志,为了控制删除过程,这是一个很好的方法   这样做?

在这种情况下,您不是真正的删除,而是逻辑删除;该记录不会从数据库中删除,但会被标记为已删除。这会影响所有其他查询(例如,您必须选择删除标志为false的所有记录,因为删除标志为true的记录为“已删除”) 这对于存储所有更改非常有用,但您还需要考虑表格维度......将始终添加记录并且永远不会真正删除...

就个人而言,我会使用日志文件并删除记录

我希望这可以提供帮助

安吉洛

答案 1 :(得分:0)

Q1。有没有办法使用DELETE保留历史记录或操作日志? A1。您正在服务器端工作,因此在删除时您可以使用您选择的任何记录器(如Log4j或SLF4j)在代码中生成日志。

Q2。如果我使用DELETE删除数据,那么我添加一个新数据,新数据将插入到已删除的位置,因此id是错误的吗? A2。没有MySQL不会使用相同的密钥。

你的朋友建议的是软删除,意味着系统中仍然可用的数据。但它每次都会使你的桌子更大。实际上,您可以在此处使用多种方法,完全取决于您的需求,例如您需要删除的数据。