我创建了一个飞行课,这里是对它的描述。
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 :(得分:1)
如果没有索引,维护自动增量列会变得太昂贵,这就是MySQL要求自动增量列成为索引最左边部分的原因。
您应该在删除密钥之前删除autoincrement属性:
ALTER TABLE flight_class MODIFY id INT NOT NULL;
ALTER TABLE flight_class DROP PRIMARY KEY;
请注意,您有一个复合PRIMARY KEY,它涵盖了所有三列,并且不保证id是唯一的。
如果它恰好是唯一的,你可以再次成为PRIMARY KEY和AUTO_INCREMENT:
ALTER TABLE flight_class MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;