Consegui adaptar essas instruções, pegue uma tabela com uma chave primária sem incremento existente e adicione uma chave primária com incremento à tabela e crie uma nova chave primária composta com as chaves antigas e novas como uma chave primária composta usando o seguinte código:
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 );
Quando isso é feito, o campo _USER_ID existe e possui todos os valores numéricos da chave primária exatamente como você esperaria. Com a "DROP TABLE" na parte superior, você pode executar isso repetidamente para experimentar variações.
O que não consegui trabalhar é a situação em que há FOREIGN KEYs de entrada que já apontam para o campo USER_ID. Recebo essa mensagem quando tento fazer um exemplo mais complexo com uma chave estrangeira recebida de outra tabela.
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
Eu estou supondo que eu preciso derrubar todas as chaves estrangeiras antes de fazer a tabela ALTER e depois reconstruí-las depois. Por enquanto, porém, eu queria compartilhar essa solução com uma versão mais desafiadora da pergunta original, caso outras pessoas entrassem nessa situação.
alter table
para adicionar a chave, mas o MySQL não gera IDs para campos que ainda não os possuem. Você precisará atualizar manualmente os campos existentes e garantir que seu novo incremento automático inicie com o deslocamento correto - o padrão é '1' e você acabaria com erros de chave duplicados.