tipos solucion revise puede pudo ocurrió los indice foránea foreign extranjera error encontrado ejemplo dato crear constraint columnas clave ajena adicionar mysql innodb mysql-error-1025 mysql-error-1091

mysql - solucion - ocurrió un error al crear la clave foránea(revise los tipos de dato)



MySQL(InnoDB): es necesario borrar la columna y la restricción y el índice de la clave externa acompañante (3)

Precisamente, intenta esto:

Primero suelte la clave foránea o restricción:

ALTER TABLE `alums_alumphoto` DROP FOREIGN KEY `photo_id_refs_id_63282119`;

El comando anterior elimina la restricción de clave externa en la columna. Ahora puede soltar la columna photo_id (el índice es eliminado por MySQL al soltar la columna):

ALTER TABLE `alums_alumphoto` DROP COLUMN `photo_id`;

Alternativamente, puedes combinar estas 2 operaciones en una sola:

ALTER TABLE `alums_alumphoto` DROP FOREIGN KEY `photo_id_refs_id_63282119` , DROP COLUMN `photo_id`;

Aquí está mi mesa:

CREATE TABLE `alums_alumphoto` ( `id` int(11) NOT NULL auto_increment, `alum_id` int(11) NOT NULL, `photo_id` int(11) default NULL, `media_id` int(11) default NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`), KEY `alums_alumphoto_alum_id` (`alum_id`), KEY `alums_alumphoto_photo_id` (`photo_id`), KEY `alums_alumphoto_media_id` (`media_id`), CONSTRAINT `alums_alumphoto_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES `media_mediaitem` (`id`), CONSTRAINT `alum_id_refs_id_706915ea` FOREIGN KEY (`alum_id`) REFERENCES `alums_alum` (`id`), CONSTRAINT `photo_id_refs_id_63282119` FOREIGN KEY (`photo_id`) REFERENCES `media_mediaitem` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8

Quiero eliminar la columna photo_id , que presumiblemente también requerirá eliminar la restricción de clave foránea y el índice.

El problema es que recibo errores cuando trato de soltar la columna:

ERROR 1025 (HY000): Error on rename of ''./dbname/#sql-670_c5c'' to ''./dbname/alums_alumphoto'' (errno: 150)

... cuando trato de soltar el índice (igual que el anterior), y cuando trato de soltar la restricción de clave externa:

ERROR 1091 (42000): Can''t DROP ''photo_id_refs_id_63282119''; check that column/key exists)

¿En qué orden debería estar haciendo todo esto? ¿Qué comandos precisos debería usar?


Lo seguro es hacer una tabla duplicada.

> CREATE TABLE alums_alumphoto_new LIKE alums_alumphoto; > ALTER TABLE .... // Drop constraint > ALTER TABLE .... // Drop KEY > ALTER TABLE .... // Drop the column > INSERT INTO alums_alumphoto_new (SELECT id, alum_id, photo_id, media_id, updated FROM alums_alumphoto); > RENAME TABLE alums_alumphoto TO alums_alumphoto_old, alums_alumphoto_new TO alums_alumphoto;

Si hay un error al ejecutar RENAME TABLE, algunas otras tablas pueden tener restricciones de clave externa que hagan referencia a esta tabla, en cuyo caso todo este enfoque es estúpido. :)


Intente combinar las instrucciones DROP KEY y DROP FOREIGN KEY.

ALTER TABLE `alums_alumphoto` DROP KEY KEY `alums_alumphoto_photo_id`, DROP FOREIGN KEY `photo_id_refs_id_63282119`; ALTER TABLE `alums_alumphoto` DROP COLUMN `photo_id`;