Bu talimatları, var olmayan artımlı birincil anahtarla bir tablo alıp tabloya artan bir birincil anahtar ekleyebildim ve aşağıdakileri kullanarak hem eski hem de yeni anahtarlarla bileşik bir birincil anahtar olarak yeni bir bileşik birincil anahtar oluşturabildim 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 );
Bu yapıldığında, _USER_ID alanı bulunur ve birincil anahtar için tam olarak beklediğiniz gibi tüm sayı değerlerine sahiptir. Üstteki "DROP TABLE" ile, varyasyonları denemek için bunu tekrar tekrar çalıştırabilirsiniz.
Ne işe alamadım ne zaten USER_ID alanında işaret gelen gelen FOREIGN KEYs durumudur. Başka bir tablodan gelen yabancı anahtarla daha karmaşık bir örnek yapmaya çalıştığımda bu iletiyi alıyorum.
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
ALTER tablosunu yapmadan önce tüm yabancı anahtarları yıkmam ve daha sonra bunları yeniden oluşturmam gerektiğini tahmin ediyorum. Ama şimdilik bu çözümü başkalarının bu duruma girmesi durumunda orijinal sorunun daha zorlayıcı bir versiyonuyla paylaşmak istedim.
alter table
Anahtarı eklemek için kolayca yapabilirsiniz , ancak MySQL zaten sahip olmayan alanlar için kimlik oluşturmaz. Mevcut alanları manuel olarak güncellemeniz ve ardından yeni otomatik_rşleminizin doğru ofsette başladığından emin olmanız gerekir - varsayılan olarak '1' olur ve yine de yinelenen anahtar hatalarıyla sonuçlanırsınız.