Мені вдалося адаптувати ці вказівки: взяти таблицю з існуючим первинним ключем, що не збільшується, і додати первинний ключ, що збільшується, і створити новий складений первинний ключ зі старими та новими ключами як складений первинний ключ, використовуючи наступне код:
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 );
Коли це зроблено, поле _USER_ID існує і містить усі значення числа для первинного ключа саме так, як ви очікували. З "СТОЛОМ ДРОПУВАННЯ" вгорі ви можете запускати це знову і знову, щоб експериментувати з варіаціями.
Що мені не вдалося налагодити роботу - це ситуація, коли є вхідні ЗАМЕЧНІ КЛЮЧІ, які вже вказують на поле USER_ID. Це повідомлення я отримую, коли намагаюся зробити більш складний приклад із вхідним іноземним ключем з іншої таблиці.
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
Я здогадуюсь, що мені потрібно зірвати всі сторонні ключі перед тим, як робити таблицю ALTER, а потім відновити їх згодом. Але наразі я хотів поділитися цим рішенням на більш складну версію оригінального питання, якщо інші стикаються з цією ситуацією.
alter table
щоб додати ключ, але MySQL не генерує ідентифікатори для полів, у яких їх ще немає. Вам доведеться вручну оновити наявні поля, а потім переконатися, що ваш новий auto_increment починається з потрібного зміщення - він за замовчуванням дорівнює "1", і ви все одно просто закінчитесь дублюючими помилками ключів.