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.