删除MySQL列索引而不知道其名称

时间:2013-08-05 11:57:57

标签: mysql sql database hibernate indexing

我有一个使用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脚本中没有用户交互的情况下工作。

2 个答案:

答案 0 :(得分:3)

您可以为表格information_schema选择索引:

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

答案 1 :(得分:1)

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

  

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