sql >> Databasteknik >  >> RDS >> Oracle

ORA-00955-namnet används redan av ett befintligt objekt

Kanske finns det ett INDEX kopplad till PRIMARY KEY CONSTRAINT , och den heter också PK_B .

Du kan kontrollera det som :

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

Om det är sant, gör då :

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Uppdatering:Angående ALTER INDEX uttalande, några viktiga punkter som nämndes av Justin i kommentarerna

Oracle skapar implicit en UNIQUE index för att stödja PRIMARY KEY CONSTRAINT . Eftersom indexet har samma namn som primärnyckeln, och nu när primärnyckeln ändras är det bättre för att släppa och återskapa indexet igen enligt definitionen av den gamla primärnyckeln.

Min slutsats:

  • Den primära nyckelbegränsningen upprätthålls genom ett unikt index.
  • Om Oracle redan hittar ett index – unikt eller icke-unikt – använder det det som primärnyckeln.
  • Om indexet ursprungligen skapades som icke-unikt, kommer det att fortsätta att visas som icke-unikt, men det kommer faktiskt att vara ett unikt index.

En bra demonstration och ganska detaljerad om andra aspekter också av Arup :Primära nycklar garanterar unikhet? Tänk om.



  1. Spåra signaler med en signalbearbetningsdatamodell

  2. Få de vanligaste värdena för alla kolumner

  3. Hur man aktiverar Pipe Concatenation Operator i MySQL

  4. MySQL-partitionering / sönderdelning / delning - vilken väg ska jag gå?