【发布时间】:2014-08-21 13:43:43
【问题描述】:
我们在 Oracle DBMS(由遗留应用程序使用)上有下表,其中时间戳是键的一部分(我知道会有更好的方法...)
TABLE ITEM_HISTORY (
ITEM_ID number,
MY_TIMESTAMP TIMESTAMP(7),
...
PRIMARY KEY (ITEM_ID, MY_TIMESTAMP));
只有 ITEM_ID 和 MY_TIMESTAMP 的组合是唯一的。在正在运行的系统上 我们现在需要保证,每个时间戳都是唯一的,因为我们必须 对损坏的数据进行了一些更正,并且对于给定的数据,我们违反了唯一键约束。 通过简单的 MY_TIMESTAMP = SYSTEMTIMESTAMP 更新,所有行 将具有相同的时间戳。
如何使用 SQL 更新我的表,以便每一行都有唯一的时间戳?
更新/说明:
由于我们客户的数据已损坏,我只能尝试尽可能好地更正这些项目。 在某些情况下,损坏表中的项目(具有不同的 ITEM_ID)将被更正 到具有相同 ITEM_ID 的相同项目。要进行此更新,我必须在此之前保证 时间戳不同。
【问题讨论】:
-
一些想法。 1 - 如果在完全相同的时间插入 2 行会怎样(我知道它们会相隔几毫秒)但是如果时间戳不是那么精确呢? 2 - 您必须重新加载/插入所有数据。没有办法处理表中已经存在的记录。 3 - 您可以构建任何其他类型的唯一标识符吗?可能是
auto-increment?我来自 sql 领域,对 Oracle 不是很熟悉。 -
您能说明一下您使用的是哪个 DBMS 吗?是 SQL 还是 Oracle?
-
为唯一键添加一个序列。你为什么要为此使用时间戳呢?您冒着未来数据违反约束的风险。
-
什么是 TABLE_ID?能改变吗?为什么不专注于此?
-
我同意 cmets 的观点,即桌子设计得不好。我无法改变这一点。该表在客户处有效,但他们遇到了问题,因为他们导入了无效数据。通过更正我面临的问题的数据,许多时间戳具有完全相同的值。我遇到了问题。