2017-05-20 3 views
0

まずで列に一意のインデックスを構築することはできません私ははありません重複した値

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

を走ったと私は結果として何行を得ませんでした。

だから、私は

CREATE UNIQUE INDEX BEAT_IDX_UNQ ON BEAT (BEATID); 

を走り、

無効な挿入または更新値(複数可)を得た:オブジェクトの列が制約されている - 何 2表の行が重複した列の値を持つことはできません。ユニークインデックス "BEAT_IDX_UNQ"に重複値(アクティブなトランザクションから見える)を保存しようとしました。

何がありますか?

+0

どのようなデータベースですか? –

+2

破損したインデックスのように見えます。確認するデータベース 'gfix -v -f'を検証します。 –

+0

データベースのバックアップと復元を行い、再度クエリを実行してください。 Val Marinovが述べているように、これは、そのインデックスを使用するクエリで行を「隠す」壊れたインデックスを示す可能性があります。バックアップとリストアによって索引が再構築されます。 –

答えて

3

あなたのような状況の原因が増えることがあります。まず、「ビート」関係に影響を与える保留中のトランザクションがあるかどうか再確認する必要があります。コミットまたはロールバックすると問題を解決できます。システムテーブルrdb$statementsで照会の実行を確認することができます。

また、NULLが一意の値の意味でどのように扱われるかは疑問です。 Firebird NULL Guideにお問い合わせください。Firebird documentationに記載されています。結局のところ、あなたはまだ同じ問題を持っている場合バックアップ/復元が解決するだろう。

関連する問題