Error al cambiar el nombre de una columna en MySQL


434

¿Cómo cambio el nombre de una columna en la tabla xyz? Las columnas son:

Manufacurerid, name, status, AI, PK, int

Quiero renombrar a manufacturerid

Intenté usar el panel PHPMyAdmin, pero aparece este error:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)

55
Está intentando cambiar una tabla que tiene una referencia de clave externa.
— mellowsoon el

2
posible duplicado de cambio de nombre de columnas de clave externa en MySQL
— OMG Ponies

Respuestas:


747

Lone Ranger está muy cerca ... de hecho, también necesita especificar el tipo de datos de la columna renombrada. Por ejemplo:

ALTER TABLE `xyz` CHANGE `manufacurerid` `manufacturerid` INT;

Recuerda :

  • Reemplace INT con el tipo de datos de su columna (REQUERIDO)
  • Tilde / Backtick (`) es opcional

12
Creo que la columna contiene una clave externa para obtener el error de la respuesta, por lo que debe soltar la clave externa, modificar la tabla y agregar la clave externa (es mejor hacer una copia de seguridad primero) y puede modificarla solo cambiando el nombre con el botón derecho en la mesa - alter table
— Chris Sim

77
Tenga en cuenta que en esta solución pierde todas las demás definiciones de columna, como nulabilidad, valor predeterminado, etc. (consulte: stackoverflow.com/questions/8553130/… ).
— Dejan

Entonces, básicamente, en lugar de MODIFY column <TYPE>(para redefinir una columna), es CHANGE column new_column <TYPE>?
— mwfearnley

SHOW CREATE TABLE table_namepuede ayudarlo a descubrir la definición actual de la columna
— Mr. Deathless el

@Dejan agradece y esto es realmente molesto, ¿por qué necesita un tipo cuando no puede especificar ningún otro modificador? O bien requieren un tipo + modificadores o no lo requieren en absoluto.
— JMac

43

La declaración estándar de cambio de nombre de Mysql es:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
CHANGE [COLUMN] old_col_name new_col_name column_definition 
[FIRST|AFTER col_name]

para este ejemplo:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Referencia: MYSQL 5.1 ALTER TABLE Sintaxis


40

PARA MYSQL:

ALTER TABLE `table_name` CHANGE `old_name` `new_name` VARCHAR(255) NOT NULL;

PARA ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;

3
No funciona si usa "los nombres de columna para MySQL. No use nada o `en su lugar.
— Alexis No

13

EDITAR

Puede cambiar el nombre de los campos usando:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html


1
# 1064 - Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para obtener la sintaxis correcta para usar cerca de '' en la línea 1
— Bharanikumar

17
Esto sería útil, pero no es fiel a la documentación que citó: "Cuando usa CAMBIAR o MODIFICAR, column_definition debe incluir el tipo de datos y todos los atributos que deberían aplicarse a los nuevos atributos de columna [...] presentes en la definición original pero no se especifica para la nueva definición no se llevan adelante ".
— artfulrobot

tiene que ser "ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype (length)"
— Chris Sim

7

Hay un problema de sintaxis, porque la sintaxis correcta para alterar el comando es ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;


2

Con MySQL 5.x puede usar:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;

1

Renombrar una columna en MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

ALTERAR CAMBIO DE MESA;

Ejemplo:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

SINTAXIS

alterar tabla nombre_tabla cambiar nombre de columna nombre de columna antigua a nuevo nombre de columna ;

Ejemplo:

alter table biblioteca de la columna de cambio de nombre de costos a los precios ;


2
En mysql, RENAME se usa para cambiar el nombre de la tabla, no de una columna, para cambiar el nombre de una columna, use CHANGE.
— jathin

La pregunta es para MySQL: esta sintaxis no es válida en MySQL.
— tjbp

Como otros señalan, utilice una sintaxis válida de MySQL.
— fool4jesus

Hay una sintaxis mysql no válida.
— Hasib Kamal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.