Ошибка переименования столбца в MySQL

434

Как переименовать столбец в таблице xyz? Столбцы:

Manufacurerid, name, status, AI, PK, int

Я хочу переименовать в manufacturerid

Я пытался использовать панель PHPMyAdmin, но я получаю эту ошибку:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)
Bharanikumar
источник
5
Вы пытаетесь изменить таблицу, в которой есть ссылка на внешний ключ.
mellowsoon

Ответы:

747

Lone Ranger очень близок ... на самом деле, вам также нужно указать тип данных переименованного столбца. Например:

ALTER TABLE `xyz` CHANGE `manufacurerid` `manufacturerid` INT;

Помните :

  • Замените INT на тип данных вашего столбца (ОБЯЗАТЕЛЬНО)
  • Тильда / Backtick (`) является необязательной
Мэтт Даймонд
источник
12
Я думаю, что столбец содержит внешний ключ для получения ошибки ответа, поэтому вы должны удалить внешний ключ, изменить таблицу и добавить внешний ключ (лучше сделать резервную копию в первую очередь), и вы можете изменить его, изменив только имя правой кнопкой мыши на столе - изменить стол
Крис Сим
7
Помните, что в этом решении вы потеряете все другие определения столбцов, такие как обнуляемость, значение по умолчанию и т. Д. (См .: stackoverflow.com/questions/8553130/… ).
Деян
Так что в основном вместо MODIFY column <TYPE>(для переопределения столбца) это CHANGE column new_column <TYPE>?
mwfearnley
SHOW CREATE TABLE table_nameможет помочь вам выяснить текущее определение столбца
Mr. Deathless
@Dejan спасибо, и это действительно раздражает, зачем нужен тип, когда вы не можете указать другие модификаторы? Либо требуют модификаторы типа +, либо не требуют его вообще.
JMac
43

Стандартный оператор переименования Mysql:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
CHANGE [COLUMN] old_col_name new_col_name column_definition 
[FIRST|AFTER col_name]

для этого примера:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Ссылка: MYSQL 5.1 ALTER TABLE Синтаксис

dongpf
источник
40

ДЛЯ MYSQL:

ALTER TABLE `table_name` CHANGE `old_name` `new_name` VARCHAR(255) NOT NULL;

ДЛЯ ОРАКУЛА:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;
mahbub_siddique
источник
3
Это не работает, если вы используете "для имен столбцов для MySQL. Не используйте ничего или `вместо этого.
Алексис №
13

РЕДАКТИРОВАТЬ

Вы можете переименовать поля, используя:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Одинокий рейнджер
источник
1
# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '' в строке 1
Bharanikumar
17
Это было бы полезно, но это не относится к цитируемой вами документации: «Когда вы используете CHANGE или MODIFY, column_definition должно включать тип данных и все атрибуты, которые должны применяться к новым атрибутам столбца [...], присутствующим в исходном определении но не указано, для нового определения не переносятся. "
artfulrobot
это должно быть «ALTER TABLE xyz CHANGE manufacurerid factoryrid тип данных (длина)»
Крис Сим
7

Существует проблема синтаксиса, потому что правильный синтаксис для изменения команды ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;

Даршан
источник
2

С MySQL 5.x вы можете использовать:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;
Майк Ким
источник
1

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

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;
Хасиб Камаль
источник
0

ИЗМЕНИТЬ СТОЛ ИЗМЕНЕНИЯ;

Пример:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;
Ваквар хан
источник
-5

СИНТАКСИС

изменить таблицу table_name переименовать столбец старое имя столбца в новое имя столбца ;

Пример:

изменить таблицу библиотеки переименовать стоимость столбца в цену ;

Abinaya
источник
2
В mysql RENAME используется для переименования таблицы, а не столбца, для переименования столбца используйте CHANGE.
Джатин
Вопрос к MySQL - это неверный синтаксис в MySQL.
августа
Как отмечают другие, пожалуйста, используйте действительный синтаксис MySQL.
fool4jesus
Недопустимый синтаксис mysql.
Хасиб Камаль