MySQL命令行如何删除复合主键中的指定索引列
命令行实现方法
你在SHOW INDEXES结果里看到的两条Key_name为PRIMARY的记录,本质是同一个复合主键索引包含的两个字段,不是两个独立的同名索引。MySQL本身不支持直接删除复合主键中的单个列,不管是phpMyAdmin还是命令行,底层都是通过「删除旧的复合主键→新建仅包含目标字段的主键」实现的,具体操作步骤如下:
- 操作前先检查:如果存在其他表通过外键关联了当前表的这个复合主键,先临时关闭外键约束校验,避免操作报错:
SET FOREIGN_KEY_CHECKS = 0;
- 先删除现有的复合主键,主键索引用固定语法删除即可:
ALTER TABLE sous_categories DROP PRIMARY KEY;
注意:MySQL要求主键列必须满足非空约束,如果你的
id_sous_categorie列建表时没加NOT NULL属性,执行删主键操作后、建新主键前,要先给这个列补非空约束,比如该列是INT类型就执行:ALTER TABLE sous_categories MODIFY COLUMN id_sous_categorie INT NOT NULL;
- 新建仅包含
id_sous_categorie字段的主键:
ALTER TABLE sous_categories ADD PRIMARY KEY (id_sous_categorie);
- 如果你最开始关闭了外键检查,操作完成后记得重新开启:
SET FOREIGN_KEY_CHECKS = 1;
操作完成后重新执行SHOW INDEXES from sous_categories;,就能看到主键索引下只剩id_sous_categorie一个字段,已经移除了categorie_id列。
内容的提问来源于stack exchange,提问作者E Epsylon
相关产品推荐
相关产品推荐

