Udało mi się dostosować te instrukcje, wziąć tabelę z istniejącym nieinkrementalnym kluczem podstawowym i dodać do tabeli zwiększający się klucz podstawowy i utworzyć nowy złożony klucz podstawowy ze starym i nowym kluczem jako złożonym kluczem podstawowym, używając następującego kod:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY ( _USER_ID, USER_ID );
Po wykonaniu tej czynności pole _USER_ID istnieje i zawiera wszystkie wartości liczbowe klucza podstawowego dokładnie tak, jak można się spodziewać. Dzięki „DROP TABLE” u góry możesz to wielokrotnie powtarzać, aby eksperymentować z odmianami.
To, czego nie udało mi się uzyskać, to sytuacja, w której przychodzące KLUCZE OBCE, które już wskazują na pole USER_ID. Otrzymuję ten komunikat, gdy próbuję wykonać bardziej złożony przykład z przychodzącym kluczem obcym z innej tabeli.
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
Zgaduję, że muszę zerwać wszystkie klucze obce przed wykonaniem tabeli ALTER, a następnie odbudować je później. Ale na razie chciałem podzielić się tym rozwiązaniem z trudniejszą wersją pierwotnego pytania na wypadek, gdyby inni napotkali taką sytuację.
alter table
dodać klucz, ale MySQL nie wygeneruje identyfikatorów pól, które jeszcze ich nie mają. Będziesz musiał ręcznie zaktualizować istniejące pola, a następnie upewnić się, że nowy element auto_increment zaczyna się od właściwego przesunięcia - domyślnie wynosi „1”, a mimo to i tak skończysz z powielonymi błędami klucza.