[英]Remove Primary Key in 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
要求将一个自动增量列作为索引的最左边部分。
您应该在删除键之前删除autoincrement属性:
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;
一条线:
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` )
您也不会丢失自动增量,而不必重新添加它可能会产生副作用。
我相信Quassnoi已经回答了您的直接问题。 附带说明:也许这只是您措辞上的尴尬,但您似乎感觉到您拥有三个主键,每个字段一个。 不是这种情况。 根据定义,您只能有一个主键。 您在这里拥有的是一个主键,它是三个字段的组合。 因此,您不能“将主键放在列上”。 您可以删除主键,也可以不删除主键。 如果要一个仅包含一列的主键,则可以将现有的主键放在3列上,并在1列上创建一个新的主键。
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
如果您有复合主键,请执行以下操作: ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
“如果您还原了主键,您肯定可以将其还原为AUTO_INCREMENT”
毫无疑问,是否需要“恢复ID”列的“ PK属性”和“恢复自动增量属性”。
鉴于它在表的先前定义中是自动递增的,因此很可能存在一些程序在不提供ID值的情况下插入到该表中(因为ID列始终是自动递增的)。
任何此类程序的操作都将因不还原autoincrement属性而中断。
首先,修改列以删除auto_increment字段,如下所示:alter table user_customer_permission修改列ID int;
接下来,放下主键。 修改表user_customer_permission删除主键;
我有同样的问题,并且表中还有一些值。 虽然我用
ALTER TABLE
user_customer_permission DROP PRIMARY KEY , ADD PRIMARY KEY (
id )
问题在我的服务器上继续。 我在表内创建了新字段,然后将值转移到新字段中并删除了旧字段,问题解决了!
首先备份数据库。 然后删除与该表关联的所有外键。 截断外键表。截断当前表。 删除所需的主键。 使用sqlyog或workbench或heidisql或dbeaver或phpmyadmin。
在SQL管理器中找到表,右键单击它并选择设计,然后右键单击小键图标并选择“删除主键”。
在列中添加主键。
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
从表中删除主键。
ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.