3

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

4

2 回答 2

4

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

SELECT DISTINCT INDEX_NAME, TABLE_NAME, TABLE_SCHEMA FROM information_schema.STATISTICS;
于 2013-08-05T12:37:53.950 回答
0

不需要手动删除索引,MySQL 5.7 参考手册说:

如果从表中删除列,则这些列也会从它们所属的任何索引中删除。如果删除了构成索引的所有列,则该索引也将被删除。如果使用 CHANGE 或 MODIFY 缩短列上存在索引的列,并且生成的列长度小于索引长度,MySQL 会自动缩短索引。

于 2013-08-05T12:13:05.437 回答