【发布时间】:2012-03-18 06:34:08
【问题描述】:
问题详情。假设我们有一些 InnoDB 表,并且该表包含一些记录。 我的问题是:考虑到某种形式的操作日志记录,您将如何实现“删除”操作?我引用了“删除”,因为它有一些味道:
- 删除操作应使用
DELETE FROM table_x WHERE...。这适用于外键约束。但是如何才能跟踪这一操作呢? (我的意思是某种形式的数据库日志记录操作)。如果将删除的记录插入辅助数据库或同一数据库上的不同表中会是一个好主意吗? - 另一个想法是有一个列,比如
valid,其可能值为 1(用于活动/有效)和 0(用于已删除记录)。 “删除”操作只会将此列上的值设置为 0,业务逻辑不再考虑它。通过保留所有记录,日志记录将在同一个数据库上完成。这种方法必须大量使用触发器来执行其他任务,例如根据外键更新另一个表中的记录。
如果您有其他方法,请随意添加完成此任务的方法。
另外,如果我们确定变体 1) 效果最好,是否可以在同一个事务中(从 java 代码开始)同时执行 DELETE FROM database1.table 和 INSERT into database2.table? (老实说,我没有尝试过,但我认为它不会起作用)。我只是不想最终从第一个数据库中删除行并从第二个数据库中丢失行。如果不可能,但仍然是 1) 最好的选择,通过从 table1 中删除记录并将它们插入到同一事务中的 table2 中,将数据从 table1“移动”到 table2 是一个好习惯?
请记住 MySQL 服务器内置检查可保持数据库完整性,并且在回答我的问题/提出解决方案时,该解决方案也必须解决日志记录问题。
【问题讨论】:
-
我个人使用有效/已删除的列,如果以后需要的话,可以让你做一些“待处理”的行。
-
我们在谈论什么样的数据?如果将数据移入存档,您的公司会从挖掘数据中受益吗?
标签: java mysql transactions foreign-keys innodb