Lỗi khi đổi tên một cột trong MySQL


434

Làm cách nào để đổi tên một cột trong bảng xyz? Các cột là:

Manufacurerid, name, status, AI, PK, int

Tôi muốn đổi tên thành manufacturerid

Tôi đã thử sử dụng bảng điều khiển PHPMyAdmin, nhưng tôi gặp lỗi này:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)

5
Bạn đang cố gắng thay đổi một bảng có tham chiếu khóa ngoài trong đó.
gió mùa

Câu trả lời:


747

Lone Ranger rất gần ... trên thực tế, bạn cũng cần chỉ định kiểu dữ liệu của cột được đổi tên. Ví dụ:

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

Nhớ lại :

  • Thay thế INT bằng bất cứ kiểu dữ liệu cột nào của bạn (BẮT BUỘC)
  • Tilde / Backtick (`) là tùy chọn

12
Tôi nghĩ rằng cột chứa khóa ngoại để nhận lỗi của câu trả lời nên bạn phải Bỏ khóa ngoại, thay đổi bảng và thêm khóa ngoại (tốt hơn là sao lưu trước) và bạn có thể thay đổi nó bằng cách chỉ thay đổi tên trong nhấp chuột phải trên bàn - thay đổi bảng
Chris Sim

7
Hãy nhớ rằng trong giải pháp này, bạn sẽ mất tất cả các định nghĩa cột khác, chẳng hạn như nullable, giá trị mặc định, v.v. (xem: stackoverflow.com/questions/8553130/ Lỗi ).
Dejan

Vì vậy, về cơ bản, thay vì MODIFY column <TYPE>(để xác định lại một cột), đó là CHANGE column new_column <TYPE>?
mwfearnley

SHOW CREATE TABLE table_namecó thể giúp bạn tìm ra định nghĩa cột hiện tại
Ông Deathless

@Dejan cảm ơn và điều này thực sự gây phiền nhiễu, tại sao cần một loại khi bạn không thể chỉ định bất kỳ sửa đổi nào khác? Hoặc yêu cầu một loại + bổ nghĩa hoặc không yêu cầu nó cả.
JMac

43

Tuyên bố đổi tên tiêu chuẩn Mysql là:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
CHANGE [COLUMN] old_col_name new_col_name column_definition 
[FIRST|AFTER col_name]

cho ví dụ này:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Tham khảo: Cú pháp MYSQL 5.1 ALTER TABLE


40

ĐỐI VỚI MYSQL:

ALTER TABLE `table_name` CHANGE `old_name` `new_name` VARCHAR(255) NOT NULL;

CHO ORACLE:

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

3
Nó không hoạt động nếu bạn sử dụng "cho các tên cột cho MySQL. Sử dụng không có gì hoặc `thay vào đó.
Alexis No

13

BIÊN TẬP

Bạn có thể đổi tên các trường bằng cách sử dụng:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

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


1
# 1064 - Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết đúng cú pháp để sử dụng gần '' ở dòng 1
Bharanikumar

17
Điều này sẽ hữu ích, nhưng nó không đúng với tài liệu bạn đã trích dẫn: "Khi bạn sử dụng CHANGE hoặc MODIFY, cột_định nghĩa phải bao gồm loại dữ liệu và tất cả các thuộc tính sẽ áp dụng cho cột mới [...] Thuộc tính có trong định nghĩa ban đầu nhưng không được chỉ định cho định nghĩa mới sẽ không được chuyển tiếp. "
artfulrobot

nó phải là "ALTER TABLE xyz CHANGE manufacurerid nhà sản xuất kiểu dữ liệu (chiều dài)"
Chris Sim

7

Có một vấn đề cú pháp, bởi vì cú pháp đúng để thay đổi lệnh là ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;


2

Với MySQL 5.x bạn có thể sử dụng:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;

1

Đổi tên một cột trong MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

THAY ĐỔI BẢNG THAY ĐỔI;

Thí dụ:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

Đồng bộ

thay đổi bảng tên_bảng cột đổi tên tên cột cũ để tên cột mới ;

Thí dụ:

thay đổi thư viện bảng đổi tên chi phí cột thành giá ;


2
Trong mysql RENAME được sử dụng để đổi tên bảng không phải là cột, để đổi tên cột sử dụng CHANGE.
jathin

Câu hỏi dành cho MySQL - đây không phải là cú pháp hợp lệ trong MySQL.
tjbp

Như những người khác lưu ý, vui lòng sử dụng cú pháp MySQL hợp lệ.
lừa4jesus

Có cú pháp mysql không hợp lệ.
Hasib Kamal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.