¿Es posible cambiar el nombre de una columna en MySQL sin tener que repetir su definición de tipo?Cambiar el nombre de una columna en la tabla mysql sin tener que repetir su definición de tipo
Por favor, sin tener que hackear en information_schema.
¿Es posible cambiar el nombre de una columna en MySQL sin tener que repetir su definición de tipo?Cambiar el nombre de una columna en la tabla mysql sin tener que repetir su definición de tipo
Por favor, sin tener que hackear en information_schema.
El ALTER TABLE syntax no parece ofrecer tal posibilidad:
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
partition_options
alter_specification:
table_options
[...]
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
[...]
Cuando se utiliza
CHANGE
oMODIFY
, column_definition debe incluir los datos tipo y todos los atributos que deberían aplicarse a la nueva columna, otra que atributos de índice comoPRIMARY KEY
oUNIQUE
. Los atributos presentes en la definición original pero no especificados para la nueva definición no se transfieren.
Alvaro, ¡gracias por la buena respuesta! El último párrafo parece la respuesta definitiva a mi pregunta. – TMS
En mi caso, quería cambiar todos los columnNames de "id_something" a "idSomething" para luego poder cargar datos a mi objeto C# más rápido y fácil. Yo estaba buscando un script para hacer eso y parece imposible encontrar :( Finalmente lo hice por mí mismo en C# Aquí tienes las funciones principales que he utilizado:
Me gustaría que será muy útil para todo el mundo!
public bool columnesRename(string oldName, string newName, string dataBase, string dataTable)
{
bool res = true;
string definicio = columnaDefinicioGet(oldName, dataBase, dataTable);
cmd.CommandText = String.Format("alter table {0} change {1} {2} {3} ", dataTable, oldName, newName, definicio);
Debug.WriteLine(String.Format("canviant taula {0}: {1} per {2}", dataTable, oldName, newName));
Debug.WriteLine(cmd.CommandText);
Debug.WriteLine(cmd.ExecuteNonQuery());
return res;
}
public string columnaDefinicioGet(string columna, string dataBase, string dataTable)
{
string definicio = "";
cmd.CommandText = String.Format
(
@"select column_type, is_nullable, extra, column_default from information_schema.columns where table_schema = '{0}' and table_name = '{1}' and column_name = '{2}'"
, dataBase, dataTable, columna
);
MySqlDataReader dr = cmd.ExecuteReader();
dr.Read();
string nulONo = (dr[1].ToString() == "NO") ? "NOT NULL" : "NULL";
string valorDefault = (dr[3].ToString() == "NULL" || dr[3].ToString() == "") ? dr[3].ToString() : "DEFAULT '" + dr[3].ToString() + "'";
definicio = String.Format("{0} {1} {2} {3}", dr[0], nulONo, dr[2], valorDefault);
dr.Close();
return definicio;
}
no creo que es posible (a menos que piratear INFORMATION_SCHEMA). –
@Tomas Puedo preguntarle en qué tipo de situación deberíamos cambiar el nombre de una columna sin repetir su definición de tipo? Gracias :) – tyger
@tyger, en Si solo quiere renombrar la columna – TMS