Помилка перейменування стовпця в 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

2
можливий дублікат перейменування стовпців
OMG Ponies

Відповіді:


747

Одинокий рейнджер дуже близький ... насправді вам також потрібно вказати тип даних перейменованого стовпця. Наприклад:

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

Пам'ятайте:

  • Замініть INT будь-яким типом даних вашого стовпця (ПОТРІБНО)
  • Tilde / Backtick (`) необов’язковий

12
Я думаю, що стовпець містить зовнішній ключ, щоб отримати помилку відповіді, тому вам доведеться скинути зовнішній ключ, змінити таблицю та додати іноземний ключ (краще спершу зробити резервну копію), і ви можете змінити його, лише змінивши ім'я правою кнопкою миші on the table - alter table
Кріс Сім

7
Майте на увазі, що в цьому рішенні ви втрачаєте всі інші визначення стовпців, такі як нульовість, значення за замовчуванням тощо (див.: Stackoverflow.com/questions/8553130/… ).
Деян

Так в основному замість MODIFY column <TYPE>(для перевизначення стовпця) це CHANGE column new_column <TYPE>?
mwfearnley

SHOW CREATE TABLE table_nameдопоможе вам з’ясувати поточне визначення стовпця
Містер Безсмертний

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

ДЛЯ ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;

3
Він не працює, якщо ви використовуєте "для імен стовпців для MySQL. Нічого не використовуйте або `.
Олексій Ні

13

EDIT

Ви можете перейменувати поля за допомогою:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

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


1
# 1064 - у вашому синтаксисі SQL помилка; перевірте посібник, який відповідає вашій версії сервера MySQL, чи правильно використовувати синтаксис поблизу '' у рядку 1
Bharanikumar

17
Це було б корисно, але це не відповідає дійсності цитованої вами документації: "Коли ви використовуєте ЗМІНИ або МОДИФІЯ , колонка_визначення повинна містити тип даних і всі атрибути, які повинні застосовуватися до нового стовпця [...] Атрибути, наявні в початковому визначенні але не вказані для нового визначення не переносяться вперед ".
artfulrobot

це повинно бути "ALTER TABLE xyz CHANGE PROIZVODNY PROIZVODRID" (тип довжини) "
Chris Chris

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

SYNTAX

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

Приклад:

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


2
У mysql RENAME використовується для перейменування таблиці, а не стовпця, для перейменування стовпця використовуйте ЗМІН.
jathin

Питання для MySQL - це недійсний синтаксис в MySQL.
tjbp

Як зазначають інші, будь ласка, використовуйте дійсний синтаксис MySQL.
crazy4jesus

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