【问题标题】:Drop Column from an index mysql从索引 mysql 中删除列
【发布时间】:2022-12-29 12:41:07
【问题描述】:

我的桌子上有这些索引:

mysql> 显示来自 sous_categories 的索引;
+----------------+------------+------------+------ ------+----------------+------------+---------- ---+------------+--------+------+------------+------ ---+----------------+--------+------------+
|表 |非唯一 |键名 |序列输入索引 |列名 |整理|基数 |子部分 |打包 |空 |索引类型 |评论 |索引_评论 |可见 |表达 |
+----------------+------------+------------+------ ------+----------------+------------+---------- ---+------------+--------+------+------------+------ ---+----------------+--------+------------+
| sous_categories | 0 |初级 | 1 | id_sous_categorie |一个 | 16 |空 |空 | | B树 | | |是 |空 |
| sous_categories | 0 |初级 | 2 |分类编号 |一个 | 16 |空 |空 | | B树 | | |是 |空 |
+----------------+------------+------------+------ ------+----------------+------------+---------- ---+------------+--------+------+------------+------ ---+----------------+--------+------------+
一组 2 行(0.01 秒)

我想删除第二列,通过检查MySQL INDEX STATMENT,我发现我只能通过 index_name 删除,但在我的例子中,两者都有相同的 key_name。 请问我该怎么做? (我知道这是可能的,因为我可以用 phpmyadmin 来做,但我想知道如何用命令行来做)

【问题讨论】:

  • 这是一个索引,有两列。
  • 所以我不能删除第二列?我会编辑问题
  • Please Never post images of code, data or error messages。请编辑您的问题,并将文本复制/粘贴到问题中,格式化。这样我们就可以尝试重现问题而不必重新输入所有内容,并且屏幕阅读器可以正确索引或阅读您的问题。
  • 请您阅读Tips for asking a good Structured Query Language (SQL) question)并相应地修改您的问题。
  • MySQL 没有 alter index 选项,所以你唯一的命令行选项是 drop 然后是 create,我怀疑 phpmyadmin 正在为你做

标签: mysql sql phpmyadmin database-indexes


【解决方案1】:
ALTER TABLE sous_categories
    DROP PRIMAR KEY,
    ADD PRIMARY KEY(id_sous_categorie);

但是,要成为 PK,id_sous_categorie 必须是唯一的(无重复)并且 NOT NULL

唯一的影响将是

  • 重建表格所花费的时间。 (对 PK 的任何更改都需要重建。)
  • 如果 id_sous_categorie 不是唯一的,则会出现致命错误。 (以前,这对列被限制为唯一,但不是每一列。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多