Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Cambiar columna INT a UNSIGNED INT

Estas en el tema de Cambiar columna INT a UNSIGNED INT en el foro de Mysql en Foros del Web. Hola Gente. Como dice el título intento cambiar una columna de tipo INT a UNSIGNED INT pero una vez ya está creada y me muestra ...
  #1 (permalink)  
Antiguo 02/03/2010, 09:57
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 4 meses
Puntos: 0
Cambiar columna INT a UNSIGNED INT

Hola Gente.

Como dice el título intento cambiar una columna de tipo INT a UNSIGNED INT pero una vez ya está creada y me muestra el siguiente error:
Código SQL:
Ver original
  1. /* SQL Error (1025): Error on rename of '.\bbdd\#sql-844_2c07' to '.\bbdd\atributos' (errno: 150)  Foreign key constraint is incorrectly formed */

El código de creación de la tabla es el siguiente:
Código SQL:
Ver original
  1. CREATE TABLE `atributos` (
  2.     `id_atributo` INT(10) NOT NULL AUTO_INCREMENT,
  3.     `nombre` VARCHAR(50) NOT NULL,
  4.     `columna` VARCHAR(50) NOT NULL,
  5.     `tipo` VARCHAR(45) NOT NULL DEFAULT 'text',
  6.     `editable` TINYINT(1) NOT NULL DEFAULT '1',
  7.     `data` VARCHAR(255) NULL DEFAULT NULL,
  8.     PRIMARY KEY (`id_atributo`)
  9. )
  10. ENGINE=InnoDB
  11. ROW_FORMAT=DEFAULT
  12. AUTO_INCREMENT=18
Y la consulta que lanzo es la siguiente:
Código SQL:
Ver original
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
  4. ALTER TABLE `atributos` CHANGE COLUMN `id_atributo` `id_atributo` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT  ;
  5. SET SQL_MODE=@OLD_SQL_MODE;
  6. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  7. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Por lo que me ha parecido ver en algunos sitios, una vez creada la tabla, ya no puedes cambiar a unsiged el campo, pero eso me extraña un poco.

Alguien tiene idea de que puede ser?

Muchas gracias.
  #2 (permalink)  
Antiguo 02/03/2010, 10:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Cambiar columna INT a UNSIGNED INT

- Revisa que ese campo no sea FK en otra tabla. Si es así, deberás quitar las referencias de FK de las tablas afectadas antes de realizar el cambio, y luego volverlas a poner acordandote de cambiar los tipos de dato de los campos FK también.
- En caso que no haya FK referidas a ese campo, verifica que la tabla no contenga ya registros que no cumplan con el tipo de dato, esto es, que no haya valores negativos ya en ese campo.

El acto de deshabilitar las FK no importa, porque cuando se reactivan salta el error.

Verifica las FK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/03/2010, 10:34
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Cambiar columna INT a UNSIGNED INT

Hola.

Precisamente es ese el problema, que el campo se usa como clave foranea en otra tabla. Lógicamente habría que eliminar las FK realizar el cambio y luego volver a crearlas.

El problema lo tengo en que no es una sola tabla, son mas de 50. Hay alguna manera de que realizar una consulta que me devuelva el código de creación de todas las FKs, eliminarlas todas con algún otro comando, y luego volver a crearlas una vez hechos todos los cambios?

Muchas gracias.

Etiquetas: columna, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:10.