Odpowiedź Adriana Cornisha jest poprawna. Istnieje jednak inne zastrzeżenie dotyczące upuszczania istniejącego klucza podstawowego. Jeśli ten klucz podstawowy jest używany jako klucz obcy w innej tabeli, podczas próby jego upuszczenia wystąpi błąd. W niektórych wersjach mysql komunikat o błędzie był zniekształcony (od 5.5.17 ten komunikat o błędzie jest nadal wyświetlany)
alter table parent drop column id;
ERROR 1025 (HY000): Error on rename of
'./test/#sql-a04_b' to './test/parent' (errno: 150).
Jeśli chcesz upuścić klucz podstawowy, do którego odwołuje się inna tabela, najpierw musisz upuścić klucz obcy w tej drugiej tabeli. Możesz odtworzyć ten klucz obcy, jeśli nadal chcesz go po odtworzeniu klucza podstawowego.
Również w przypadku korzystania z kluczy kompozytowych ważna jest kolejność. Te
1) ALTER TABLE provider ADD PRIMARY KEY(person,place,thing);
and
2) ALTER TABLE provider ADD PRIMARY KEY(person,thing,place);
to nie to samo. Oba wymuszają unikalność na tym zestawie trzech pól, jednak z punktu widzenia indeksowania istnieje różnica. Pola są indeksowane od lewej do prawej. Rozważ na przykład następujące zapytania:
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 może używać indeksu klucza podstawowego w instrukcji ALTER 1
A może używać indeksu klucza podstawowego w instrukcji ALTER 2
C może używać dowolnego indeksu
D nie może używać żadnego indeksu
A wykorzystuje dwa pierwsze pola w indeksie 2 jako indeks częściowy. Nie można użyć indeksu 1, ponieważ nie zna części indeksu dotyczącej pośredniego miejsca. Jednak nadal może być w stanie użyć częściowego indeksu tylko dla osoby.
D nie może użyć żadnego z indeksów, ponieważ nie zna osoby.
Aby uzyskać więcej informacji, zobacz dokumentację mysql tutaj .