外部キーもあるテーブルから複数列の一意のキーを削除しようとしています。最初に外部キーを削除しない限り、「errno 150」が発生し続けます。
たとえば、テーブルを作成すると:
CREATE TABLE `testtable` (
`testtable_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`testtable_value` char(255) DEFAULT NULL,
`othertable_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`testtable_id`),
UNIQUE KEY `tt_unique_key` (`othertable_id`,`testtable_value`),
CONSTRAINT `tt_foreign_key` FOREIGN KEY (`othertable_id`) REFERENCES `othertable` (`othertable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
そして、次のように一意のキーを削除しようとします:
ALTER TABLE `testtable` DROP KEY `tt_unique_key`;
次のエラーが生成されます。
Error Code: 1025
Error on rename of './testdb/#sql-374_27' to './testdb/testtable' (errno: 150)
FOREIGN_KEY_CHECKS = 0 を設定しようとしましたが、同じエラーが発生します。
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE `testtable` DROP KEY `tt_unique_key`;
SET FOREIGN_KEY_CHECKS = 1;
これにより、上記と同じエラー メッセージが生成されます。
ただし、最初に外部キーを削除し、次に一意のキーを削除してから外部キーを再作成すると、すべてが機能します。
ALTER TABLE `testtable` DROP FOREIGN KEY `tt_foreign_key`;
ALTER TABLE `testtable` DROP KEY `tt_unique_key`;
ALTER TABLE `testtable` ADD CONSTRAINT `tt_foreign_key` FOREIGN KEY (`othertable_id`) REFERENCES `othertable` (`othertable_id`);
これは本当に効率が悪いようです。誰が何が起こっているのか説明できますか? 最初に外部キーを削除せずに一意のキーを削除する方法はありますか?