删除MySQL中的主键

问题描述 投票:0回答:13

我有以下表架构,它将 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 sql database-design primary-key mysql-error-1075
13个回答
351
投票

如果没有索引,维护自动增量列就会变得太昂贵,这就是为什么

MySQL
要求自动增量列位于索引的最左边。

您应该在删除键之前删除自动增量属性:

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

请注意,您有一个复合

PRIMARY KEY
涵盖了所有三列,并且
id
不保证是唯一的。

如果它恰好是唯一的,您可以将其再次设为

PRIMARY KEY
AUTO_INCREMENT

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

144
投票

一行:

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

您也不会丢失自动增量,并且必须重新添加它,这可能会产生副作用。


16
投票

我相信@Quassnoi已经回答了你的直接问题。

顺便说一句,也许这只是您的一些尴尬的措辞,但您似乎有这样的印象:您有三个主键,每个字段一个。

事实并非如此。根据定义,您只能有一个主键。这里有一个由三个字段组成的主键。

因此,您不能“删除列上的主键”,您可以删除主键,也可以不删除主键。

如果您想要仅包含一列的主键,您可以删除 3 列上的现有主键并在 1 列上创建新的主键。


13
投票
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;

11
投票

如果您有复合主键,请这样做 -

ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);


9
投票

要在列中添加主键。

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

从表中删除主键。

ALTER TABLE table_name DROP PRIMARY KEY;

5
投票

“如果您恢复主键,您肯定可以将其恢复为 AUTO_INCRMENT”

不存在是否需要对ID列“恢复PK属性”和“恢复自增属性”的疑问。

鉴于它在表的先前定义中是自动增量,很可能存在某些程序在不提供 ID 值的情况下插入到该表中(因为 ID 列无论如何都是自动增量)。

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


4
投票

我遇到了同样的问题,除了表中的一些值之外。虽然我用

更改了主键

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

我的服务器上仍然存在问题。我在表内创建了新字段,将值传输到新字段并删除了旧字段,问题解决了!


3
投票

首先修改列以删除 auto_increment 字段,如下所示: 更改表 user_customer_permission 修改列 id int;

接下来,删除主键。 更改表 user_customer_permission 删除主键;


0
投票

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


0
投票
ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);

0
投票

该列必须位于索引中。如果没有输入以下命令

更改表 添加唯一约束();

然后就可以使用了

更改表删除主键;


-1
投票

在SQL管理器中找到该表,右键单击它并选择设计,然后右键单击小钥匙图标并选择删除主键。

© www.soinside.com 2019 - 2024. All rights reserved.