合并具有唯一列的两个表条目(MySQL)

时间:2012-11-27 21:16:44

标签: mysql

我完全知道这绝不应该发生。永远。但是,我最近开始在一家没有最大数据库设计或输入验证的公司工作,这种情况已经出现。

有一张桌子,我们称之为“工作”*。乔布斯有一个主键“ID”。 ID为1的作业具有与之关联的大量数据;然而,愚蠢的是有人将这份工作复制为id 2(到目前为止已发生约500次)。两者的所有信息都需要合并为id 1(或2,无所谓)。

列由外键与UPDATE链接:CASCADE和DELETE:RESTRICT。它们并非都被称为jobs_id。

这是我唯一的(看似明智的)选择:

  1. 将id 1更改为我可以保证不使用的内容(2,147,483,647)
  2. 暂时删除外键DELETE:RESTRICT
  3. 删除ID为
  4. 的条目
  5. 将ID 2更新为2,147,483,647(将其与所有其他条目相关联)
  6. 将ID 2,147,483,647更改为id 2
  7. 恢复DELETE:RESTRICT
  8. 由于没有任何代码实际执行删除(限制就像故障安全(有人直接在DB中编辑)),并且更新:级联保留,数据不应该不同步。这看起来确实很乱。

    这将包含在交易中。

    我可以编写一些内容来遍历每个表(~180)和每列以查找某些名称/条件,然后从1更新为2,但是当新表/列出现时需要维护。

    由于这已经发生了很多,我没有看到重写以防止它很快发生,“解决方案”(贴膏药)需要半自动化。

    • 不是桌子的真实姓名。他(或她)的身份已被伪装,所以他(或她)不会被欺负。

    感谢任何输入。

1 个答案:

答案 0 :(得分:0)

假设您知道如何识别重复记录,为什么不创建具有相同结构的新表(可能没有FK),然后在将值复制到新表时循环原始表。当您复制时,请在写入新表时修复该值。然后放下原件并将temp重命名为原件。

这将清理表格,但如果进程仍在制作重复的条目,您可以使用唯一的密钥来限制未来的损害。