2013-11-28 85 views
0

我創建了一個飛行類,這裏是它的描述。從mysql表中刪除主鍵

mysql> desc flight_class; 

+----------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+----------+--------------+------+-----+---------+-------+ 
| FID  | varchar(5) | YES | MUL | NULL |  | 
| amount | decimal(7,2) | YES |  | NULL |  | 
| no_seats | decimal(2,0) | YES |  | NULL |  | 
| class_id | int(11)  | NO | PRI | 0  |  | 
+----------+--------------+------+-----+---------+-------+ 

然後我想讓class_id變成外鍵。

下降的主鍵我說

mysql> alter table flight_class drop primary key; 
ERROR 1025 (HY000): Error on rename of '.\flysafe\#sql-76c_1' to '.\flysafe\flight_class' (errno: 150) 

我是一個新手到這一點。任何人都可以告訴我我哪裏出錯了。或者它是否影響這張桌子的其他桌子? 請確實給一些資源來學習這些權利。

謝謝anirudh。

+0

@VijaykumarHadalgi這個問題是有關刪除自動增量的主鍵。 – Barmar

+0

@Barmar:是的,你的儀式我沒有檢查_err否150_ –

回答

1

如果沒有索引,維護一個自動增量列變得過於昂貴,這就是爲什麼MySQL需要一個自動增量列作爲索引的最左邊部分。

你應該丟棄鍵之前刪除自動增量屬性:

ALTER TABLE flight_class MODIFY id INT NOT NULL; 
ALTER TABLE flight_class DROP PRIMARY KEY; 

請注意,你有一個複合主鍵涵蓋了所有三列ID是不能保證是唯一的。

如果碰巧是唯一的,你可以把它成爲一個主鍵和AUTO_INCREMENT再次:

ALTER TABLE flight_class MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;