【问题标题】:Delete MySQL column index without knowing its name在不知道其名称的情况下删除 MySQL 列索引
【发布时间】:2013-08-06 03:01:57
【问题描述】:

我有一个使用 Hibernate 来支持 Oracle 和 MySQL 数据库的应用程序。更新后,我必须手动删除一些带有索引/约束的列。这些索引具有 Hibernate 生成的随机名称。

在 Oracle 中我可以这样做:

ALTER TABLE table_name DROP (column_name) CASCADE CONSTRAINTS;

不幸的是,这对 MySQL 来说是不可能的。有没有可能做这样的事情

DROP INDEX (SELECT Key_name FROM (SHOW INDEX FROM table_name WHERE Column_name = 'column_name')) ON table_name;

在我删除列之前?

编辑:这应该可以在没有用户交互的情况下在 SQL 脚本中工作。

【问题讨论】:

    标签: mysql sql database hibernate indexing


    【解决方案1】:

    您可以为表格信息模式选择索引:

    SELECT DISTINCT INDEX_NAME, TABLE_NAME, TABLE_SCHEMA FROM information_schema.STATISTICS;
    

    【讨论】:

      【解决方案2】:

      不需要手动删除索引,MySQL 5.7 Reference Manual 说:

      如果从表中删除列,这些列也会从表中删除 它们所属的任何索引。如果构成一个的所有列 索引被删除,索引也被删除。如果您使用 CHANGE 或 修改以缩短列上存在索引的列, 并且得到的列长度小于索引长度,MySQL 自动缩短索引。

      【讨论】:

        猜你喜欢
        • 2021-01-05
        • 2010-11-23
        • 1970-01-01
        • 2012-02-18
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        相关资源
        最近更新 更多