gpt4 book ai didi

database - DB constraits是否可以忽略已有记录,只申请新数据?

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:51 25 4
gpt4 key购买 nike

我想了解不同数据库引擎的答案,但在我们的案例中;我们有一些记录对于列来说不是唯一的,现在我们想让该列唯一,这迫使我们删除重复值。我们使用 Oracle 10g。这合理吗?还是类似于 goto 语句 :)?我们真的应该删除吗?如果我们有数百万条记录怎么办?

最佳答案

回答发布的问题:不,它不能在我知道的任何 RDBMS 上完成

但是,与大多数事情一样,您可以通过执行以下操作来解决它。

使用新列和现有列创建复合键

您可以在不删除任何内容的情况下通过添加新列使其唯一,将其称为 PartialKey。

对于现有行,您将 PartialKey 设置为唯一值(从零开始)。

在现有列和 PartialKey 上创建唯一约束(您可以这样做,因为这些行中的每一行现在都是唯一的)。

对于新行,仅对 PartialKey 使用默认值零(因为零已被使用),这将强制现有列在表中具有唯一值。

重要编辑

这很弱 - 如果您删除具有部分键 0 的行。现在可以使用现有列中已有的值添加另一行,因为部分键中的 0 将保证唯一性。

你需要确保要么

  1. 你永远不会删除行部分 key 0
  2. 你总是有一个虚拟行部分键 0,你永远不会删除它(或者你立即自动重新插入)

编辑:硬着头皮清理数据

如果正如您所说,您刚刚意识到该列应该是唯一的,那么您应该(如果可能)清理数据。上面的方法是一种 hack,你会发现自己在访问表时编写了更多的 hack(你可能会发现你有两套逻辑来处理针对该表的查询,一套用于列是唯一的,另一套用于不是。我现在就清理它,否则它会回来咬你一千遍。

关于database - DB constraits是否可以忽略已有记录,只申请新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/479756/

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