เกิดข้อผิดพลาดในการเปลี่ยนชื่อคอลัมน์ใน 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 ด้วยประเภทข้อมูลคอลัมน์ของคุณ (จำเป็น)
  • Tilde / Backtick (`) เป็นตัวเลือก

12
ฉันคิดว่าคอลัมน์มี foreign key เพื่อรับข้อผิดพลาดของคำตอบดังนั้นคุณต้องวาง foreign key แก้ไขตารางและเพิ่ม foreign key (ดีกว่าสำรองก่อน) และคุณสามารถแก้ไขได้โดยการเปลี่ยนชื่อในคลิกขวา บนโต๊ะ - แก้ไขตาราง
Chris Sim

7
โปรดทราบว่าในการแก้ปัญหานี้คุณจะสูญเสียคำจำกัดความคอลัมน์อื่น ๆ ทั้งหมดเช่นค่าความเป็นโมฆะค่าเริ่มต้น ฯลฯ (ดู: stackoverflow.com/questions/8553130/… )
Dejan

โดยพื้นฐานแล้วแทนที่จะเป็น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 Syntax


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 ไม่ใช้อะไรเลยหรือ `แทน
อเล็กซิส No

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

มันจะต้องเป็น "แก้ไขตาราง xyz เปลี่ยนประเภทผู้ผลิต (ความยาว)"
Chris Sim

7

มีปัญหาเกี่ยวกับไวยากรณ์เนื่องจากไวยากรณ์ที่ถูกต้องในการแก้ไขคำสั่งคือ ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;




0

แก้ไขการเปลี่ยนแปลงตาราง;

ตัวอย่าง:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

SYNTAX

เปลี่ยนแปลงตารางtable_nameคอลัมน์เปลี่ยนชื่อชื่อคอลัมน์เก่าจะชื่อคอลัมน์ใหม่ ;

ตัวอย่าง:

ตารางการเปลี่ยนแปลงห้องสมุดคอลัมน์เปลี่ยนชื่อค่าใช้จ่ายที่จะราคา ;


2
ใน mysql RENAME ใช้สำหรับเปลี่ยนชื่อตารางไม่ใช่คอลัมน์เพื่อเปลี่ยนชื่อคอลัมน์ให้ใช้ CHANGE
jathin

คำถามสำหรับ MySQL - นี่ไม่ใช่ไวยากรณ์ที่ถูกต้องใน MySQL
tjbp

ตามที่คนอื่นทราบโปรดใช้ไวยากรณ์ MySQL ที่ถูกต้อง
fool4jesus

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