从mysql中的表中删除主键

时间:2013-11-28 04:47:56

标签: mysql primary-key rdbms

我创建了一个飞行课,这里是对它的描述。

  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。

1 个答案:

答案 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;