我有一个使用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脚本中没有用户交互的情况下工作。
答案 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 自动缩短索引。