Làm cách nào để đổi tên một cột trong bảng cơ sở dữ liệu bằng SQL?


113

Nếu tôi chỉ muốn đổi tên một cột (không thay đổi kiểu hoặc các ràng buộc của nó, chỉ tên của nó) trong cơ sở dữ liệu SQL sử dụng SQL, làm cách nào để thực hiện điều đó? Hay là điều này không thể thực hiện được?

Điều này dành cho bất kỳ cơ sở dữ liệu nào tuyên bố hỗ trợ SQL, tôi chỉ đơn giản là đang tìm một truy vấn dành riêng cho SQL sẽ hoạt động bất kể việc triển khai cơ sở dữ liệu thực tế nào.


2
Skaffman biệt phái, đây không phải là một câu hỏi "SQL", nó (có thể) là một câu hỏi "SQLServer".
Tony Andrews

1
Bất kỳ hệ thống cơ sở dữ liệu nào có mục đích sử dụng SQL. Oracle, MySQL, v.v. Tôi đang tìm câu trả lời độc lập với cơ sở dữ liệu.
MetroidFan2002

Câu trả lời:


97

Trên PostgreSQL (và nhiều RDBMS khác), bạn có thể làm điều đó với ALTER TABLEcâu lệnh thông thường :

=> SELECT * FROM Test1;
 id | foo | bar 
----+-----+-----
  2 |   1 |   2

=> ALTER TABLE Test1 RENAME COLUMN foo TO baz;
ALTER TABLE

=> SELECT * FROM Test1;
 id | baz | bar 
----+-----+-----
  2 |   1 |   2

10
Điều này không được hỗ trợ trong MySQL, phải không?
ustun

5
Không, nó không được hỗ trợ trong MySQL
rick

4
Điều này cũng không được hỗ trợ trong Microsoft SQL Server. Thay vì sử dụng sp_renamenhư mỗi câu trả lời Galwegian của: stackoverflow.com/a/174586/834431
Chris

Tôi tin rằng MySQL 8.0 hỗ trợ cú pháp này ngay bây giờ
Dan

118

Cụ thể đối với SQL Server, sử dụng sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

Có vẻ như Microsoft cụ thể và không có gì trong truy vấn ban đầu chỉ ra một Microsoft DBMS.
bortzmeyer 06/10/08

1
Có, câu trả lời tôi đang tìm là SQL "chuẩn" và không phụ thuộc vào bất kỳ triển khai cụ thể nào. Tuy nhiên, đó là một câu trả lời tốt cho bất kỳ ai sử dụng hệ thống của Microsoft.
MetroidFan2002

35

Trong MySQL, cú pháp là ALTER TABLE ... CHANGE:

ALTER TABLE <table_name> CHANGE <column_name> <new_column_name> <data_type> ...

Lưu ý rằng bạn không thể chỉ đổi tên và để nguyên kiểu và ràng buộc; bạn phải gõ lại kiểu dữ liệu và các ràng buộc sau tên mới của cột.


nó được kiểm tra trong cơ sở dữ liệu mySQL
chloe jaspher

2
Chúng ta chỉ có thể đổi tên cột mà không ảnh hưởng đến kiểu / ràng buộc với RENAMEcú pháp. Đổi tên một cột trong MySQL
Lukasz Szozda 15/09/18

21

Thật không may, đối với một giải pháp độc lập với cơ sở dữ liệu, bạn sẽ cần biết mọi thứ về cột. Nếu nó được sử dụng trong các bảng khác làm khóa ngoại, chúng cũng cần được sửa đổi.

ALTER TABLE MyTable ADD MyNewColumn OLD_COLUMN_TYPE;
UPDATE MyTable SET MyNewColumn = MyOldColumn;
-- add all necessary triggers and constraints to the new column...
-- update all foreign key usages to point to the new column...
ALTER TABLE MyTable DROP COLUMN MyOldColumn;

Đối với các trường hợp đơn giản nhất (không có ràng buộc, trình kích hoạt, chỉ mục hoặc khóa), nó sẽ lấy 3 dòng trên. Đối với bất cứ điều gì phức tạp hơn, nó có thể rất lộn xộn khi bạn điền vào các phần còn thiếu.

Tuy nhiên, như đã đề cập ở trên, có những phương pháp dành riêng cho cơ sở dữ liệu đơn giản hơn nếu bạn biết cơ sở dữ liệu nào bạn cần sửa đổi trước thời hạn.


Trực tiếp trả lời câu hỏi, ngay cả khi nó không phải là chính xác những gì Người hỏi đã được tìm kiếm ...
Lambart

Trong phần bình luận, OP thực sự đã làm rõ rằng đây chính xác là thứ mà anh ấy đang tìm kiếm.
MagneTism

20

Tôi nghĩ đây là cách dễ nhất để thay đổi tên cột.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

điều này đã làm việc cho tôi trên SQL Server. Tôi không chắc liệu điều này có hoạt động trên các DBMS khác hay không
Nic

9

Trong Informix, bạn có thể sử dụng:

RENAME COLUMN TableName.OldName TO NewName;

Điều này đã được thực hiện trước khi tiêu chuẩn SQL giải quyết vấn đề - nếu nó được giải quyết trong tiêu chuẩn SQL. Bản sao của tôi về tiêu chuẩn SQL 9075: 2003 không hiển thị nó là tiêu chuẩn (trong số những thứ khác, RENAME không phải là một trong những từ khóa). Tôi không biết liệu nó có thực sự nằm trong SQL 9075: 2008 hay không.


2
Cũng không có RENAME trong SQL 2008 Draft.
Nicolas Buduroi

Không phải AS - sử dụng TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi

6

Trong máy chủ sql, bạn có thể sử dụng

exec sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'

hoặc là

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'

6

Bạn có thể sử dụng lệnh sau để đổi tên cột của bất kỳ bảng nào trong SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'

3

ALTER TABLE là SQL tiêu chuẩn. Nhưng nó không hoàn toàn được thực hiện trong nhiều hệ thống cơ sở dữ liệu.


Tôi chấp nhận câu trả lời của bortz cho câu trả lời của bạn vì anh ấy đã giải thích chi tiết. Tuy nhiên, tôi ủng hộ bạn.
MetroidFan2002

@ MetroidFan2002 - Tôi chỉ thêm câu trả lời của mình để thừa nhận rằng "ALTER TABLE" không chỉ là PostgreSQL, nó khá phổ biến.
Paul Tomblin

2

Tiêu chuẩn sẽ là như vậy ALTER TABLE, nhưng điều đó không nhất thiết phải được hỗ trợ bởi mọi DBMS mà bạn có thể gặp phải, vì vậy nếu bạn đang tìm kiếm một cú pháp bao gồm tất cả, bạn có thể gặp may.


0

Ngoài ra SQL, bạn có thể thực hiện việc này trong Microsoft SQL Server Management Studio, từ Bảng thiết kế bảng.

Cách đầu tiên

Nhấp đúp chậm vào cột. Tên cột sẽ trở thành một hộp văn bản có thể chỉnh sửa.

Cách thứ hai

SqlManagement Studio >> DataBases >> table >> specificTable >> Column Folder >> Nhấp chuột phải vào cột >> Reman

Cách thứ ba

Bảng >> Nhấp chuột phải >> Thiết kế

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.