我有下面的表架构将 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

如何删除列的主键?

2010-01-21 17:20:38
问题评论:

回答:

没有索引,维护自动增量列变得太昂贵,这就是为什么MySQL需要自动递增的列是索引的左侧部分。

删除密钥之前,您应该删除自动增量属性︰

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

请注意,必须涵盖所有三个列复合PRIMARY KEY id不能保证是唯一的。

如果它恰好是唯一的则可以使其再次成为PRIMARY KEYAUTO_INCREMENT :

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

哦,失望到它 !: P

不是我,然后必须还原为 auto_increment 主键的 id 列?改变表 user_customer_permission 中添加主键 (id);改变表 user_customer_permission 更改 id id int(11) auto_increment;

@markb︰ 如果要还原的主键,则确保可能恢复回AUTO_INCREMENT.

这做什么意思自动增量列是主键的最左边。 ?

@ArupRakshit: dev.mysql.com/doc/refman/5.6/en/...使用 InnoDB 表, AUTO_INCREMENTai_col AUTO_INCREMENT机制必须定义为索引的一部分,这样就可以获得最大的列的值对表执行索引SELECT MAX(ai_col)查阅的等效项。通常情况下,这通过使某些表索引的第一列的列。

一行︰

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

此外没有,您将丢失自动增量或需要重新添加它其中可能有的副作用。

完美。使其为一行 + 1

我认为这答案需要浮到顶部如不只不会删除需要更改字段的定义,它还允许 fk 约束对表进行的更改通过改变-真的帮我 !

@markb︰ 请考虑将此标记为已接受的答案 !

我希望我可以多个投票.帮我要删除多个主键.:)在简单的单词。.

我认为 Quassnoi 已回答了您直接的问题。只是注意︰ 也许这是对您来说,只是一些笨拙的用词,但您似乎认为有三个主关键字,每个字段中的其中一个。这不是这种情况。根据定义,您只能有一个主键。这里有是组成的三个字段的主键。因此,不能拖的主键的列。您可以删除主键,或无法删除主键。如果要仅包含一列的主键,可以放在 3 列的现有主键和 1 列上创建一个新的主键。

谢谢 @Jay,很有帮助

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

"如果您恢复的主键,则确保可能恢复回 AUTO_INCREMENT"

应该有的是"还原 PK 属性"和"还原自动递增属性",ID 列的理想没有问题。

考虑到是在事先定义表的自动增量,则很可能存在某些程序,而无需提供的 ID 值 (因为 ID 列是自动增量仍) 此表中插入。

任何此类程序的操作将中断通过不还原自动增量属性。

内容来源于Stack Overflow Remove Primary Key in MySQL
请输入您的翻译

Remove Primary Key in MySQL

确认取消