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 requieren de la eliminación de la restricción de clave externa y el índice.

El problema es que tengo errores cuando intento colocar la columna:

ERROR 1025 (HY000): Error en cambiar el nombre de '.\dbname\#sql-670_c5c' a '.\dbname\alums_alumphoto' (errno: 150)

… cuando intento quitar el índice (igual que el anterior), y cuando intento colocar la restricción de clave externa:

ERROR 1091 (42000): no se Puede SOLTAR 'photo_id_refs_id_63282119'; compruebe que la columna de clave existe)

Qué orden debo estar haciendo todo esto? Lo que precisa comandos debo utilizar?

Has probado a dejar caer la columna y el índice en la misma instrucción ALTER?

OriginalEl autor nmjk | 2008-12-03

3 Comentarios

  1. 7

    Lo cierto, es para hacer un duplicado de la tabla.

    > 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 de ejecución de cambiar el nombre de la TABLA, algunas otras tablas pueden tener restricciones de clave externa referencia a esta tabla, en cuyo caso todo este enfoque es estúpido. 🙂

    OriginalEl autor yogman

  2. 25

    Precisamente, intente esto :

    Primera caída de la Clave externa 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 colocar la columna photo_id (el índice es eliminado por MySQL en dejar caer la columna) :

    ALTER TABLE `alums_alumphoto` DROP COLUMN `photo_id`;

    Aternatively, usted podría combinar estas 2 operaciones en uno :

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

    OriginalEl autor Rishi Agarwal

  3. 0

    Trate de la combinación de la CAÍDA de la CLAVE y DROP FOREIGN KEY declaraciones.

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

    OriginalEl autor Ed Mays

Dejar respuesta

Please enter your comment!
Please enter your name here