ฉันสามารถปรับคำแนะนำเหล่านี้ให้ใช้ตารางด้วยคีย์หลักที่ไม่เพิ่มขึ้นที่มีอยู่และเพิ่มคีย์หลักที่เพิ่มขึ้นลงในตารางและสร้างคีย์หลักคอมโพสิตใหม่ที่มีทั้งคีย์เก่าและใหม่เป็นคีย์หลักคอมโพสิตโดยใช้ดังต่อไปนี้ รหัส:
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 จะมีอยู่และมีค่าตัวเลขทั้งหมดสำหรับคีย์หลักตรงตามที่คุณคาดหวัง ด้วย "DROP TABLE" ที่ด้านบนคุณสามารถเรียกใช้สิ่งนี้ซ้ำแล้วซ้ำอีกเพื่อทดสอบกับรูปแบบต่างๆ
สิ่งที่ฉันไม่สามารถทำงานได้คือสถานการณ์ที่มีคีย์ FOREIGN ขาเข้าที่ชี้ไปที่ฟิลด์ USER_ID แล้ว ฉันได้รับข้อความนี้เมื่อฉันพยายามทำตัวอย่างที่ซับซ้อนมากขึ้นด้วยรหัสต่างประเทศขาเข้าจากตารางอื่น
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
ฉันเดาว่าฉันจำเป็นต้องทำลายกุญแจต่างประเทศทั้งหมดก่อนที่จะทำตาราง ALTER แล้วสร้างใหม่ในภายหลัง แต่สำหรับตอนนี้ฉันต้องการแบ่งปันวิธีแก้ปัญหานี้กับคำถามต้นฉบับที่ท้าทายมากขึ้นในกรณีที่คนอื่น ๆ ประสบสถานการณ์เช่นนี้
alter table
เพิ่มคีย์ได้อย่างง่ายดายแต่ MySQL จะไม่สร้าง ID สำหรับฟิลด์ที่ยังไม่มี คุณจะต้องอัปเดตฟิลด์ที่มีอยู่ด้วยตนเองจากนั้นตรวจสอบให้แน่ใจว่า auto_increment ใหม่ของคุณเริ่มต้นที่ออฟเซ็ตที่ถูกต้องซึ่งเป็นค่าเริ่มต้นที่ '1' และคุณเพิ่งจบด้วยข้อผิดพลาดที่สำคัญซ้ำ ๆ