เปลี่ยนชื่อคอลัมน์ใน 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ฟังก์ชั่นที่ใช้ในฐานข้อมูลของออราเคิล

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

สังเกตเห็น backticks ใช้สำหรับ MySQL ในขณะที่ใช้เครื่องหมายคำพูดคู่สำหรับไวยากรณ์ของ Oracle นอกจากนี้โปรดทราบว่า MySQL 8.0 อาจไม่รับ backticks ในกรณีดังกล่าวให้เรียกใช้คิวรีโดยไม่มีการตีกลับและอาจทำงานได้


@ lad2025ระบุไว้ด้านล่าง แต่ฉันคิดว่าคงจะดีถ้าเพิ่มสิ่งที่เขาพูด ขอบคุณ @ lad2025!

คุณสามารถใช้RENAME COLUMNใน MySQL 8.0 เพื่อเปลี่ยนชื่อคอลัมน์ใด ๆ ที่คุณต้องการเปลี่ยนชื่อ

ALTER TABLE table_name RENAME COLUMN old_col_name TO new_col_name;

แก้ไขตารางไวยากรณ์ :

คอลัมน์ชื่อ:

  • สามารถเปลี่ยนชื่อคอลัมน์ แต่ไม่สามารถกำหนดได้

  • สะดวกกว่า CHANGE เพื่อเปลี่ยนชื่อคอลัมน์โดยไม่เปลี่ยนนิยาม


2
คุณสามารถมีคอลัมน์ที่มีชื่อเดียวกันได้หรือไม่และทำไมต้องระบุประเภทข้อมูลด้วย
Lealo

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
@ สรุปว่าคุณพูดถูกอีกครั้ง 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! มันแปลกมาก Backticks ควรเป็นอักขระเครื่องหมายคำพูดเริ่มต้นสำหรับ 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;ฉันยังพยายามเพิ่ม `backticks CHANGEฉันสิ้นสุดการใช้
รีด

60

ในเวอร์ชันเซิร์ฟเวอร์: 5.6.34 MySQL Community Server

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name data_type;

80
ไม่ใช้ DROP และเพิ่มอย่างแน่นอน คุณจะสูญเสียข้อมูลทั้งหมดโดยทำเช่นนี้
tomazahlin

27

จากMySQL 5.7 อ้างอิงคู่มือการใช้งาน

ไวยากรณ์:

เปลี่ยนตาราง t1 เปลี่ยน DATATYPE;

เช่น: สำหรับลูกค้าตารางมีคอลัมน์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;

แก้ไขตารางไวยากรณ์ :

คอลัมน์ชื่อ:

  • สามารถเปลี่ยนชื่อคอลัมน์ แต่ไม่สามารถกำหนดได้

  • สะดวกกว่า CHANGE เพื่อเปลี่ยนชื่อคอลัมน์โดยไม่เปลี่ยนนิยาม

การสาธิต DBFiddle


4

คุณสามารถใช้รหัสต่อไปนี้:

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



1

ไวยากรณ์: แก้ไขตาราง 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.