Eindeutigen Multi-Spalten-Schlüssel löschen, ohne den Fremdschlüssel zu löschen?

Ich versuche, einen mehrspaltigen eindeutigen Schlüssel aus einer Tabelle zu löschen, die auch einen Fremdschlüssel enthält. Ich erhalte immer 'errno 150', es sei denn, ich lösche zuerst den Fremdschlüssel.

Wenn ich zum Beispiel die Tabelle erstelle:

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;

und ich versuche, den eindeutigen Schlüssel wie folgt zu entfernen:

ALTER TABLE `testtable` DROP KEY `tt_unique_key`;

Es erzeugt den Fehler:

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

Ich habe versucht, FOREIGN_KEY_CHECKS = 0 zu setzen, erhalte aber den gleichen Fehler:

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

Dies erzeugt die gleiche Fehlermeldung wie oben.

Wenn ich jedoch zuerst den Fremdschlüssel lösche, dann den eindeutigen Schlüssel lösche und dann den Fremdschlüssel neu erstelle, funktioniert alles:

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

Das scheint wirklich ineffizient zu sein. Kann mir jemand erklären, was los ist? Gibt es eine Möglichkeit, den eindeutigen Schlüssel zu löschen, ohne den Fremdschlüssel zuerst zu löschen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage