无法在没有重复值的列上构建唯一索引

时间:2017-05-20 06:07:48

标签: firebird

首先我跑了

select beatid, count(*)
from beat
group by beatid
having count(*) > 1

结果没有排。

然后我跑了

CREATE UNIQUE INDEX BEAT_IDX_UNQ ON BEAT (BEATID);

得到了

  

无效的插入或更新值:对象列受约束 - 否   2个表行可以具有重复的列值。试图存储   唯一索引中的重复值(对活动事务可见)   “BEAT_IDX_UNQ”。

这是怎么回事?

1 个答案:

答案 0 :(得分:3)

像你这样的情况会有更多原因。首先,您需要重新检查是否有一些影响“节拍”关系的待处理事务,提交它们或回滚可以解决问题。您可以检查系统表rdb$statements以执行查询。

此外,还有一个问题是如何在唯一值的意义上处理NULL。您可以参考 Firebird NULL Guide ,它可以在Firebird documentation中找到。毕竟,如果你仍然有同样的问题,备份/恢复将解决。