@Adrian Cornish คำตอบถูกต้อง อย่างไรก็ตามมีข้อแม้อื่นที่จะวางคีย์หลักที่มีอยู่ หากคีย์หลักนั้นถูกใช้เป็นคีย์ต่างประเทศจากตารางอื่นคุณจะได้รับข้อผิดพลาดเมื่อพยายามวาง ใน mysql บางรุ่นข้อความแสดงข้อผิดพลาดมีรูปแบบไม่ถูกต้อง (ตั้งแต่ 5.5.17 ข้อความแสดงข้อผิดพลาดนี้ยังคงอยู่
alter table parent drop column id;
ERROR 1025 (HY000): Error on rename of
'./test/#sql-a04_b' to './test/parent' (errno: 150).
หากคุณต้องการวางคีย์หลักที่ถูกอ้างอิงโดยตารางอื่นคุณจะต้องวาง foreign key ในตารางอื่นก่อน คุณสามารถสร้างคีย์ต่างประเทศนั้นใหม่ได้หากคุณยังต้องการหลังจากสร้างคีย์หลักใหม่
นอกจากนี้เมื่อใช้คีย์ผสมคำสั่งซื้อก็สำคัญเช่นกัน เหล่านี้
1) ALTER TABLE provider ADD PRIMARY KEY(person,place,thing);
and
2) ALTER TABLE provider ADD PRIMARY KEY(person,thing,place);
ไม่ใช่สิ่งเดียวกัน พวกเขาทั้งสองบังคับใช้เอกลักษณ์ในชุดของสามเขตข้อมูลอย่างไรก็ตามจากมุมมองการทำดัชนีมีความแตกต่าง เขตข้อมูลจะถูกทำดัชนีจากซ้ายไปขวา ตัวอย่างเช่นพิจารณาแบบสอบถามต่อไปนี้:
A) SELECT person, place, thing FROM provider WHERE person = 'foo' AND thing = 'bar';
B) SELECT person, place, thing FROM provider WHERE person = 'foo' AND place = 'baz';
C) SELECT person, place, thing FROM provider WHERE person = 'foo' AND place = 'baz' AND thing = 'bar';
D) SELECT person, place, thing FROM provider WHERE place = 'baz' AND thing = 'bar';
B สามารถใช้ดัชนีคีย์หลักในคำสั่ง ALTER 1
A สามารถใช้ดัชนีคีย์หลักในคำสั่ง ALTER 2
C สามารถใช้ทั้งดัชนี
D ไม่สามารถใช้ดัชนีใดก็ได้
A ใช้สองฟิลด์แรกในดัชนี 2 เป็นดัชนีบางส่วน A ไม่สามารถใช้ดัชนี 1 ได้เนื่องจากไม่ทราบว่าส่วนที่อยู่ตรงกลางของดัชนีนั้น มันอาจยังสามารถใช้ดัชนีบางส่วนกับคนเพียงคนเดียวได้
D ไม่สามารถใช้ดัชนีอย่างใดอย่างหนึ่งเพราะมันไม่รู้จักคน
ดูเอกสาร mysql ที่นี่สำหรับข้อมูลเพิ่มเติม