Largar a chave única da coluna muli sem deixar cair a chave estrangeira?

Eu estou tentando excluir uma chave exclusiva de várias colunas de uma tabela que também tem uma chave externa. Eu continuo recebendo 'errno 150', a menos que eu apague primeiro a chave estrangeira.

Por exemplo, se eu criar a tabela:

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;

e eu tento remover a chave única assim:

ALTER TABLE `testtable` DROP KEY `tt_unique_key`;

Isso gera o erro:

Error Code: 1025
Error on rename of './testdb/#sql-374_27' to './testdb/testtable' (errno: 150)

Eu tentei definir FOREIGN_KEY_CHECKS = 0, mas recebo o mesmo erro:

SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE `testtable` DROP KEY `tt_unique_key`;
SET FOREIGN_KEY_CHECKS = 1;

Isso gera a mesma mensagem de erro acima.

No entanto, se eu excluir primeiro a chave estrangeira, exclua a chave exclusiva e, em seguida, recrie a chave estrangeira, tudo funcionará:

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`);

Isso parece muito ineficiente. Alguém pode explicar o que está acontecendo? Existe uma maneira de soltar a chave exclusiva sem deixar cair a chave estrangeira primeiro?

questionAnswers(1)

yourAnswerToTheQuestion