java - MySQL 从表中删除或更新表列以将其标记为已删除?

标签 java mysql transactions foreign-keys innodb

问题详细信息。假设我们有一些 InnoDB 表,并且该表包含一些记录。 我的问题是:考虑到某种形式的操作日志记录,您将如何实现“删除”操作?我引用“删除”是因为它有一些味道:

  1. 删除操作应使用DELETE FROM table_x WHERE...。这对于外键约束非常有效。但如何跟踪这一操作呢? (我的意思是某种形式的数据库日志记录操作)。如果将删除的记录插入到辅助数据库或同一数据库上的不同表中会是一个好主意吗?
  2. 另一个想法是有一列,假设 valid 的可能值为 1(对于 Activity/有效)和 0(对于已删除的记录)。 “删除”操作只会将该列的值设置为 0,业务逻辑不再考虑它。通过保留所有记录,可以在同一数据库上完成日志记录。这种方法必须大量使用触发器来执行其他任务,例如根据外键更新另一个表中的记录。

如果有的话,请随意添加其他方法来完成此任务。 另外,如果我们认为变体 1) 效果最好,是否可以在同一个事务(从 java 代码开始)中执行 DELETE FROM database1.tableINSERT into database2。表? (老实说,我没有尝试过这个,但我认为它不会起作用)。我只是不想最终从第一个数据库中删除行并从第二个数据库中丢失行。如果不可能,但仍然是1)最好的选择,通过在同一事务中删除表1中的记录并将它们插入到表2中来将数据从表1“移动”到表2是一个好的做法吗?

请记住 MySQL 服务器内置检查可以保持数据库完整性,并且在回答我的问题/提出解决方案时,解决方案也必须解决日志记录问题。

最佳答案

我更喜欢第一种方法,它可以帮助您实现引用完整性......,您可以使用基表上的触发器来处理它,因此一切都发生在同一个事务中

关于java - MySQL 从表中删除或更新表列以将其标记为已删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487851/

相关文章:

java - Action初始化的差异

java - JMock 匹配器与 setAttribute(String, Object)

MySQL 表被标记为崩溃并且最后一次(自动?)修复失败

php - 使用正确查询时未显示数据

c++ - PostgreSQL不支持嵌套的BEGIN和END语句,即使它不支持自主事务?

mysql - 无法在 Zend Framework 中回滚事务

java - org.json.JSONException : Value Data of type java. lang.String 无法转换为 JSONObject

java - 使用 Google 的 Gson 反序列化 Bugzilla JSON 时出现问题

php - mySql 中的有效或无效状态

sql-server - 事务级别、nolock/readpast 和并发性