Переименуйте столбец в таблице mysql, не повторяя его определение типа

Можно ли переименовать столбец в MySQL без повторения его определения типа?

Пожалуйста, не взламывая информацию.

Ответ 1

Синтаксис ALTER TABLE, похоже, не дает такой возможности:

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]
[...]

Подробнее:

Когда вы используете CHANGE или MODIFY, column_definition должен включать данные тип и все атрибуты, которые должны применяться к новому столбцу, другие чем атрибуты индекса, такие как PRIMARY KEY или UNIQUE. Атрибуты присутствуют в первоначальном определении, но не указаны для нового определение не переносится вперед.

Ответ 2

В моем случае я хотел изменить все имена столбцов с "id_something" на "idSomething", чтобы быстрее и легко загружать данные на мой объект С#. Я искал script, чтобы сделать это, и найти его невозможно:( Наконец, я сделал это сам в С# Здесь у вас есть основные функции, которые я использовал:

Я хочу, чтобы это было полезно для всех!

    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;
    }