Ошибка переименования столбца в 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)

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 Синтаксис


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

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;



-5

СИНТАКСИС

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

Пример:

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


2
В mysql RENAME используется для переименования таблицы, а не столбца, для переименования столбца используйте CHANGE.
Джатин

Вопрос к MySQL - это неверный синтаксис в MySQL.
августа

Как отмечают другие, пожалуйста, используйте действительный синтаксис MySQL.
fool4jesus

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