删除MySQL中的主键
删除MySQL中的主键
我有以下的表结构,它将用户与权限在一个实时的MySQL数据库上进行了映射:
mysql> describe user_customer_permission; +------------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_customer_id | int(11) | NO | PRI | NULL | | | permission_id | int(11) | NO | PRI | NULL | | +------------------+---------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
我想要删除user_customer_id和permission_id的主键,并保留id的主键。
当我运行以下命令时:
alter table user_customer_permission drop primary key;
我得到以下错误:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
如何删除一个列的主键?
问题出现的原因是,没有索引的情况下,维护自增列会变得非常昂贵,这就是为什么MySQL要求自增列是索引的最左边部分。
解决方法是,在删除主键之前,先移除自增属性:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL; ALTER TABLE user_customer_permission DROP PRIMARY KEY;
请注意,您有一个覆盖了所有三个列的复合主键,并且id不能保证是唯一的。
如果id确实是唯一的,您可以将其重新设置为主键和自增列:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
如果您恢复了主键,那么您可以将其还原为自增列。
"autoincrement column to be a leftmost part of the PRIMARY KEY." 是什么意思?
这是指在InnoDB表中使用AUTO_INCREMENT机制时,必须将AUTO_INCREMENT列定义为索引的一部分,以便可以执行类似于索引查找的SELECT MAX(ai_col)操作来获取最大列值。通常,可以通过将该列作为某个表索引的第一列来实现这一点。
"PRIMARY is not defined. Why this occurs? So I had to delete and add again the ID column without specifying primary key" 的意思是什么?
这是指主键未定义。为什么会出现这种情况,我不知道。可能需要提供更多细节才能解决问题。