gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:04:03 26 4
gpt4 key购买 nike

我很清楚这永远不应该发生。曾经。但是,我最近开始在一家没有最好的数据库设计或输入验证的公司工作,并且出现了这种情况。

有一个我们称之为'jobs'*的表。乔布斯有一个主键,“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为1的条目
  4. 将 id 2 更新为 2,147,483,647(将其与所有其他条目链接)
  5. 将 id 2,147,483,647 更改为 id 2
  6. 恢复删除:限制

由于没有代码实际执行删除(限制只是作为故障安全(有人直接在数据库中编辑)),并且更新:级联被保留,数据不应该不同步。不过这看起来确实很乱。

这将被包装在一个交易中。

我可以写一些东西来遍历每个表 (~180) 和每个列以找到特定的名称/条件,然后从 1 更新到 2,但是当出现新表/列时需要维护。

由于这种情况已经发生过很多次,而且我没有看到任何重写来防止它很快发生,所以“解决方案”(橡皮膏)需要是半自动的。

  • 不是表的真实姓名。他(或她)的身份已被伪装,因此他(或她)不会被欺负。

感谢任何输入。

最佳答案

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

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

关于mysql - 合并具有唯一列的两个表条目 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com