私は次のようなテーブルを持っています:
CREATE TABLE `Words` (
`wordId` int(11) NOT NULL AUTO_INCREMENT,
... snip! ...
`PartOfSpeechpartOfSpeechId` int(11) DEFAULT NULL,
PRIMARY KEY (`wordId`) USING BTREE,
KEY `fk_Words_PartOfSpeech` (`PartOfSpeechpartOfSpeechId`),
CONSTRAINT `fk_Words_PartOfSpeech` FOREIGN KEY (`PartOfSpeechpartOfSpeechId`) REFERENCES `PartOfSpeech` (`partOfSpeechId`) ON DELETE SET NULL ON UPDATE NO ACTION,
) ENGINE=InnoDB AUTO_INCREMENT=7306 DEFAULT CHARSET=utf8
PartOfSpeechpartOfSpeechId 列を列挙値に変換する必要があります (つまり、INT 列として保持しますが、参照するテーブルは完全に削除します)。
Word の FK が原因で、PartOfSpeech テーブルを削除しようとすると、予想どおり失敗します。これを修正するために、ALTER TABLE Words DROP FOREIGN KEY fk_Words_PartOfSpeech
どこにでもあるように、列の代わりに FK の名前を使用して を実行しました。それでもエラーが発生します:
ERROR 1025 (HY000): Error on rename of './lexercise/#sql-1a5_263' to './lexercise/Words' (errno: 150)
テーブル Words を探すと、消えてしまいました。行った。どこに行くかわからない。おそらく、MySQL の内部のテーブル変更コードが一時テーブルを作成しており、それを適切な名前/場所に戻すことができていません。
ここで何が起こっているのですか?外部キーを削除するとテーブル全体が失われる可能性はありますか? 私の経歴は Postgres にあり、これをデバッグする最善の方法がわかりません。