sql >> Database teknologi >  >> RDS >> Oracle

ORA-00955-navnet bruges allerede af et eksisterende objekt

Måske er der en INDEX knyttet til PRIMARY KEY CONSTRAINT , og det er også navngivet som PK_B .

Du kan kontrollere det som :

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

Hvis det er sandt, så gør :

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Opdatering:Angående ALTER INDEX udtalelse, få vigtige punkter som nævnt af Justin i kommentarerne

Oracle opretter implicit en UNIQUE indeks for at understøtte PRIMARY KEY CONSTRAINT . Da indekset har samme navn som den primære nøgle, og nu hvor den primære nøgle bliver ændret, er det bedre for at droppe og genskabe indekset igen i henhold til definitionen af ​​den gamle primærnøgle.

Min konklusion:

  • Den primære nøglebegrænsning håndhæves gennem et unikt indeks.
  • Hvis Oracle allerede finder et indeks – unikt eller ikke-unikt – bruger det det som primærnøglen.
  • Hvis indekset oprindeligt blev oprettet som ikke-unik, vil det fortsætte med at blive vist som ikke-unik, men det vil faktisk være et unikt indeks.

En god demonstration og også ret detaljeret om andre aspekter af Arup :Primære nøgler garanterer unikhed? Tænk igen.



  1. forkert kolonnespecifikation for kolonne

  2. Problemer med at kommunikere mellem to docker-containere

  3. Hvordan kan jeg tælle antallet af rækker, som en MySQL-forespørgsel returnerede?

  4. Kopier brugerrettigheder mellem databaser på samme server