问题:如何从 MySQL 表中的列中删除主键,同时保留一个主键?
场景:
考虑下表将用户客户映射到实时 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 dropprimary key; 来执行此操作;导致错误:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
答案:
自动增量列需要索引。如果没有索引,维护自动增量列就会变得过于昂贵。因此,MySQL 要求自动增量列位于索引的最左边。
要从 user_customer_id 和 Permission_id 中删除主键,请按照以下步骤操作:
删除自动增量属性来自id:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
删除主键:
ALTER TABLE user_customer_permission DROP PRIMARY KEY;
请注意,复合 PRIMARY KEY 最初覆盖了所有三列,并且不保证 id 是唯一的。但是,如果 id 恰好是唯一的,您可以将其设为 PRIMARY KEY 并再次自动递增:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
以上是如何在MySQL中删除多个主键并保留一个主键?的详细内容。更多信息请关注PHP中文网其他相关文章!