Перейменуйте стовпчик у MySQL


242

Я намагаюся перейменувати стовпчик на сервері спільноти 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


Відповіді:


405

Скористайтеся наступним запитом:

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 :

ОЗНАЧИТИ КОЛІНУ:

  • Можна змінити назву стовпця, але не її визначення.

  • Більш зручно, ніж ЗМІНУвати перейменування стовпця, не змінюючи його визначення.


2
Чи можете ви мати стовпчики з такою ж назвою - або чому потрібно вказати тип даних?
Леало

5
@Lealo Як говорить команда, CHANGEзмінює стовпець на таблиці та її тип. У MYSQL документи заявляють: Attributes present in the original definition but not specified for the new definition are not carried forward.. Це означає, що ви повинні вказати визначення таблиці, або вони не будуть використовуватися для цього стовпця. Якщо ви хочете лише змінити тип даних стовпця, просто залиштеnewcolname
Rizky Fakkel

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.Aaaand редагував. Мені потрібна кава ..
Rizky Fakkel

1
Дякую @Smogen! Це дивно. Зворотні посилання повинні бути типовим символом цитати для MySQL. Ви впевнені, що "замість цього не користувалися `?
Rizky Fakkel

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

27

Із посібника MySQL 5.7 .

Синтаксис:

АЛЬТЕР ТАБЛИЦЯ t1 ЗМІНІТЬ ab ДАТАТИП;

наприклад: для клієнтів Таблиця мають 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 :

ОЗНАЧИТИ КОЛІНУ:

  • Можна змінити назву стовпця, але не її визначення.

  • Більш зручно, ніж ЗМІНУвати перейменування стовпця, не змінюючи його визначення.

Демонстрація DBFiddle


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.