Переименовать столбец в MySQL


243

Я пытаюсь переименовать столбец на сервере сообщества MySQL 5.5.27 с помощью этого выражения SQL:

ALTER TABLE table_name RENAME COLUMN old_col_name TO new_col_name;

Я тоже пробовал

ALTER TABLE table_name RENAME old_col_name TO new_col_name;

Но это говорит:

Ошибка: проверьте Руководство, соответствующее вашей версии сервера MySQL


Ответы:


406

Используйте следующий запрос:

ALTER TABLE tableName CHANGE `oldcolname` `newcolname` datatype(length);

RENAMEФункция используется в базах данных Oracle.

ALTER TABLE tableName RENAME COLUMN "oldcolname" TO "newcolname" datatype(length);

Обратите внимание на обратные пометки, используемые для MySQL, тогда как двойные кавычки используются для синтаксиса Oracle. Также обратите внимание, что MySQL 8.0 может не принимать обратные пометки. В этом случае выполните запрос без обратных галочек, и он, вероятно, будет работать.


@ lad2025 упоминает об этом ниже, но я подумал, что было бы неплохо добавить то, что он сказал. Спасибо @ lad2025!

Вы можете использовать RENAME COLUMNв MySQL 8.0, чтобы переименовать любой столбец, который вам нужно переименовать.

ALTER TABLE table_name RENAME COLUMN old_col_name TO new_col_name;

Синтаксис ALTER TABLE :

ИЗМЕНИТЬ КОЛОННУ:

  • Может изменить имя столбца, но не его определение.

  • Удобнее, чем CHANGE, переименовывать столбец без изменения его определения.


2
У вас могут быть столбцы с одинаковыми именами - или почему необходимо указать тип данных?
Лало

5
@Lealo Как говорится в команде, CHANGEизменяется столбец таблицы и ее тип. В MYSQL документы заявляют: Attributes present in the original definition but not specified for the new definition are not carried forward.. Это означает, что вы должны указать определения таблиц, иначе они не будут использоваться для этого столбца. Если вы хотите изменить только тип данных столбца, просто не newcolname
указывайте

2
@ Flimm ты снова прав. Oracle документы; In MySQL, the quote character is the backtick. If the SQL mode ANSI_QUOTES is set, double quotes can also be used to quote the identifiers. In Oracle, identifiers are quoted using double quotation marks.Ааа и отредактировано. Мне нужен кофе ..
Ризки Факкель

1
Спасибо @Smogen! Странно. Предполагается, что обратные кавычки являются символом кавычек по умолчанию для MySQL. Вы уверены, что не использовали "вместо `?
Ризки Факкель

2
В MySQL ( MYSQL STATUSпоказывает mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using EditLine wrapper) я получаю Error 1064 (42000): You have an error in your SQL Syntax;...near 'COLUMN thread_id TO threadId'...за запрос ALTER TABLE comment RENAME COLUMN thread_id TO threadId;. Я также попытался добавить кавычки `. Я закончил тем, что использовал CHANGE.
Рид

60

В версии сервера: 5.6.34 MySQL Community Server

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name data_type;

80
абсолютно не используйте DROP и ADD. сделав это, вы потеряете все данные
tomazahlin

28

Из MySQL 5.7 Справочное руководство .

Синтаксис:

ALTER TABLE t1 CHANGE ab DATATYPE;

например: для клиента TABLE, имеющего COLUMN customer_name , customer_street , customercity .

И мы хотим изменить customercity TO customer_city :

alter table customer change customercity customer_city VARCHAR(225);

18

С MySQL 8.0 вы можете использовать

ALTER TABLE table_name RENAME COLUMN old_col_name TO new_col_name;

Синтаксис ALTER TABLE :

ИЗМЕНИТЬ КОЛОННУ:

  • Может изменить имя столбца, но не его определение.

  • Удобнее, чем CHANGE, переименовывать столбец без изменения его определения.

DBFiddle Demo


4

Вы можете использовать следующий код:

ALTER TABLE `dbName`.`tableName` CHANGE COLUMN `old_columnName` `new_columnName` VARCHAR(45) NULL DEFAULT NULL ;



1

Синтаксис: ALTER TABLE table_name CHANGE old_column_name new_column_name тип данных;

Если имя таблицы - « Студент», а имя столбца - « Имя» . Затем, если вы хотите изменить имя на First_Name

ALTER TABLE Student CHANGE Name First_Name varchar(20);


0

В MySQL ваш запрос должен быть похож

ALTER TABLE table_name change column_1 column_2 Data_Type;

Вы написали запрос в Oracle.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.