2013-08-05 36 views
2

我有一個應用程序使用Hibernate來支持Oracle和MySQL數據庫。更新後,我必須手動刪除一些列上有索引/約束的列。這些索引有Hibernate生成的隨機名稱。刪除MySQL列索引而不知其名稱

在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腳本中工作。

回答

3

您可以選擇以表格的形式INFORMATION_SCHEMA指標:

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

無需手動刪除索引,MySQL 5.7 Reference Manual說:

如果列從表中被丟棄,列也從 其中他們參與任何索引中刪除。如果構成 索引的所有列都被刪除,那麼索引也會被刪除。如果使用CHANGE或 MODIFY來縮短列上存在索引的列,並且結果列長度小於索引長度,則MySQL 會自動縮短索引。

相關問題