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)
Bharanikumar
fuente
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
Matt Diamond
fuente
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

dongpf
fuente
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`;
mahbub_siddique
fuente
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

Llanero solitario
fuente
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;

Darshan
fuente
2

Con MySQL 5.x puede usar:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;
Mike Kim
fuente
1

Renombrar una columna en MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;
Hasib Kamal
fuente
0

ALTERAR CAMBIO DE MESA;

Ejemplo:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;
Vaquar Khan
fuente
-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 ;

Abinaya
fuente
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