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.