sql >> データベース >  >> RDS >> Oracle

ORA-00955名前は既存のオブジェクトですでに使用されています

    おそらくINDEXがあります PRIMARY KEY CONSTRAINTに関連付けられています 、およびPK_Bとも呼ばれます 。

    次のように確認できます:

    SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>';
    

    それが本当なら、そうしてください:

    ALTER INDEX "PK_B" RENAME TO "PK_XYZ";
    

    更新:ALTER INDEXについて 声明、コメントでジャスティンが言及したいくつかの重要なポイント

    Oracleは暗黙的にUNIQUEを作成します PRIMARY KEY CONSTRAINTをサポートするためのインデックス 。インデックスは主キーと同じ名前であり、主キーが変更されているため、より良い 古い主キーの定義に従って、インデックスを削除して再作成します。

    私の結論:

    • 主キーの制約は、一意のインデックスを介して適用されます。
    • Oracleがインデックス(一意または非一意)をすでに検出している場合は、そのインデックスを主キーに使用します。
    • インデックスが最初に非一意として作成された場合、引き続き非一意として表示されますが、実際には一意のインデックスになります。

    Arupによる優れたデモンストレーションと他の側面についても非常に詳細:主キーは一意性を保証しますか?もう一度考えてください。



    1. mysqlテーブルフィールド-リソースID#7

    2. さまざまな国、州、地理的な場所の動的ドロップダウンリスト?

    3. PhpStormが複数のデータベース接続の列を解決できません

    4. PDOとプリペアドステートメントを使用したMySQLアップデートが機能しない