当前位置: 首页 > 面试题库 >

在MySQL中删除主键

淳于健
2023-03-14
问题内容

我有以下表模式,它将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 KEYAUTO_INCREMENT再次:

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


 类似资料:
  • 问题内容: 我将quartz.net版本从1.0.3升级到2.0.2。有一个用于数据库模式的迁移脚本,该脚本是为MSSQL编写的,并且我正在尝试为其编写MYSQL版本。 但是,我无法删除主键(需要这样做)。 MSSQL的原始脚本版本: 为了简单起见,我正在尝试第一个声明 这是我尝试过的结果: ALTER TABLE BLOB_TRIGGERS DROP PRIMARY KEY; [Err] 102

  • 问题内容: 我在mysql表中有一个名为“ id”的列,这也是自动递增的主键。 当我删除行时,其ID也会被删除,从而在我的ID序列中产生“空洞”,例如 1、2、3、9、10、30等 有没有办法重复使用这些已删除的ID:S? 问题答案: 使用: …将根据表中现有的最高现有值将auto_increment值重置为下一个。这意味着它不能用于校正多个间隙。 这样做的唯一原因是为了美观的记录-数据库不在乎记

  • 本文向大家介绍MySQL ALTER列删除主键和auto_increment?,包括了MySQL ALTER列删除主键和auto_increment?的使用技巧和注意事项,需要的朋友参考一下 您可以使用ALTER命令删除主键和auto_increment。语法如下- 为了理解上述语法,让我们创建一个表。创建表的查询如下- 使用DESC命令检查表的描述。语法如下- 使用DESC检查表'removeP

  • 我正在使用mysql并试图删除外部约束,但我无法删除该密钥。 它的节目, 如何解决这个问题,请帮助我。

  • 问题内容: 在文档(http://dev.mysql.com/doc/refman/6.0/en/drop- table.html )中未明确提及。我问是因为我刚刚在Rails项目中看到了一个奇怪的数据库迁移,其中开发人员在删除表之前删除了所有索引,这似乎是不必要的。 问题答案: 是的,它确实。 但是,如果您具有诸如RESTRICT之类的外键约束来确保与其他表的参照完整性,则需要在删除或截断表之前

  • 问题内容: 我有这样的桌子 我想执行一个查询,以除去所有最新的重复项。我希望你有个主意吗? 例如,查询后的表必须是这样的 问题答案: 语法可能需要调整,但是应该做到这一点。此外,您可能希望将子查询预查询到其自己的表FIRST中,然后对该结果集运行DELETE FROM。