删除MySQL中的主键

我有下面的表格架构将user_customers映射到实时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; 

请注意,您有一个覆盖全部三列的复合PRIMARY KEY ,并且不能保证唯一。

如果碰巧是独一无二的,那么可以再次使它成为PRIMARY KEYAUTO_INCREMENT

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

一条线:

 ALTER TABLE `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` ) 

你也不会失去自动增量,必须重新添加可能会有副作用。

我相信Quassnoi已经回答了你的直接问题。 只是一个侧面说明:也许这只是你的一些尴尬的措辞,但你似乎有一个印象,你有三个主键,每场一个。 不是这种情况。 根据定义,你只能有一个主键。 你在这里是一个由三个字段组成的主键。 因此,您不能“将主键放在列上”。 您可以删除主键,或不删除主键。 如果您想要只包含一列的主键,则可以将现有主键放在3列上,并在1列上创build一个新的主键。

 ALTER TABLE `user_customer_permission` MODIFY `id` INT; ALTER TABLE `user_customer_permission` DROP PRIMARY KEY; 

“如果你恢复主键,你肯定可以恢复到AUTO_INCREMENT”

不应该存在是否需要“恢复PK属性”和“恢复ID列的自动增加属性”的问题。

鉴于它在表格的先前定义中是一个自动增量,很可能存在一些程序插入到这个表中而不提供一个ID值(因为ID列是自动增量的)。

任何此类程序的操作都将通过不恢复自动增量属性而中断。

如果你有组合主键,像这样做 – ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

首先修改列以删除auto_increment字段,如下所示:alter table user_customer_permission modify column id int;

接下来,放下主键。 alter table user_customer_permission drop主键;

我有同样的问题,在我的桌子里面有一些价值。 虽然我改变了我的主键

ALTER TABLE user_customer_permission DROP PRIMARY KEY , ADD PRIMARY KEY ( id )

问题在我的服务器上继续。 我在表格中创build了新的字段,我把值转移到新字段中,并删除了旧字段,问题解决了!

首先备份数据库。 然后删除与表关联的任何外键。 截断外键表。截断当前表。 删除所需的主键。 使用sqlyog或workbench或heidisql或dbeaver或phpmyadmin。