¿Desea eliminar la clave única de muli-column sin eliminar una clave externa?
Estoy intentando eliminar una clave única de varias columnas de una tabla que también tiene una clave externa. Sigo obteniendo 'errno 150', a menos que elimine la clave externa primero.
Por ejemplo, si creo la tabla:
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;
y trato de eliminar la clave única como esta:
ALTER TABLE `testtable` DROP KEY `tt_unique_key`;
Genera el error:
Error Code: 1025
Error on rename of './testdb/#sql-374_27' to './testdb/testtable' (errno: 150)
Intenté configurar FOREIGN_KEY_CHECKS = 0, pero obtengo el mismo error:
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE `testtable` DROP KEY `tt_unique_key`;
SET FOREIGN_KEY_CHECKS = 1;
Esto genera el mismo mensaje de error que el anterior.
Sin embargo, si primero elimino la clave externa, luego elimino la clave única, luego recrea la clave externa, todo funciona:
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`);
Esto parece realmente ineficiente. ¿Puede alguien explicar qué está pasando? ¿Hay alguna forma de soltar la clave única sin soltar primero la clave externa?