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

0

インデックスを手動で削除する必要はありません。MySQL 5.7 リファレンス マニュアルには次のように書かれています。

列がテーブルから削除されると、その列が含まれているインデックスからも列が削除されます。インデックスを構成するすべての列が削除されると、インデックスも削除されます。列にインデックスが存在する列を短くするために CHANGE または MODIFY を使用し、結果の列の長さがインデックスの長さより短い場合、MySQL は自動的にインデックスを短くします。

于 2013-08-05T12:13:05.437 に答える