SQL을 사용하여 데이터베이스 테이블의 열 이름을 바꾸려면 어떻게합니까?


113

SQL을 사용하여 SQL 데이터베이스에서 열의 이름을 변경 (유형이나 제약 조건 만 변경하지 않고 이름 만 변경)하려면 어떻게해야합니까? 아니면 불가능합니까?

이것은 SQL을 지원한다고 주장하는 모든 데이터베이스를위한 것이며, 실제 데이터베이스 구현에 관계없이 작동하는 SQL 관련 쿼리를 찾고 있습니다.


2
두 번째로, 이것은 "SQL"질문이 아니라 "SQLServer"질문 일 것입니다.
Tony Andrews

1
SQL을 사용한다고 주장하는 모든 데이터베이스 시스템. Oracle, MySQL 등 ... 데이터베이스에 독립적 인 답변을 찾고 있습니다.
MetroidFan2002

답변:


97

PostgreSQL (및 기타 여러 RDBMS)에서는 다음과 같은 일반 ALTER TABLE명령문으로 수행 할 수 있습니다 .

=> 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
이것은 MySQL에서 지원되지 않습니까?
ustun 11시

5
아니요, MySQL에서는 지원되지 않습니다
rick

4
이는 Microsoft SQL Server에서도 지원되지 않습니다. 대신 sp_renameGalwegian의 답변에 따라 사용하십시오 : stackoverflow.com/a/174586/834431
Chris

저는 MySQL 8.0이 지금이 구문을 지원한다고 믿습니다
Dan

118

특히 SQL Server의 경우 sp_rename

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

Microsoft 고유의 것으로 보이며 원래 쿼리에서 Microsoft DBMS를 나타내는 것은 없습니다.
bortzmeyer

1
예, 제가 찾던 대답은 "표준"SQL이며 특정 구현에 의존하지 않습니다. 그러나 Microsoft 시스템을 사용하는 모든 사람에게 좋은 대답입니다.
MetroidFan2002

35

MySQL에서 구문은 ALTER TABLE ... CHANGE다음과 같습니다.

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

이름을 바꾸고 유형과 제약 조건을 그대로 둘 수는 없습니다. 열의 새 이름 뒤에 데이터 유형과 제약 조건을 다시 입력해야합니다.


그것은 MySQL 데이터베이스에 테스트
jaspher 클로이

2
RENAME구문으로 유형 / 제약 조건에 영향을주지 않고 열 이름 만 바꿀 수 있습니다 . MySQL에서 열 이름 바꾸기
Lukasz Szozda

21

불행히도 데이터베이스 독립 솔루션의 경우 열에 대한 모든 것을 알아야합니다. 다른 테이블에서 외래 키로 사용되는 경우에도 수정해야합니다.

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;

가장 간단한 경우 (제약 조건, 트리거, 인덱스 또는 키 없음)의 경우 위의 3 줄을 사용합니다. 더 복잡한 것은 빠진 부분을 채울 때 매우 지저분해질 수 있습니다.

그러나 위에서 언급했듯이 미리 수정해야하는 데이터베이스를 알고있는 경우보다 간단한 데이터베이스 특정 방법이 있습니다.


바로이 ... 아스 커 찾던 정확히 아니더라도, 질문에 대한 답
Lambart

의견에서 OP는 실제로 이것이 그가 찾고 있던 것임을 분명히 밝혔습니다.
MagneTism

20

열 이름을 변경하는 가장 쉬운 방법이라고 생각합니다.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

이것은 SQL Server에서 나를 위해 일했습니다. 이것이 다른 DBMS에서 작동하는지 잘 모르겠습니다
Nic

9

Informix에서는 다음을 사용할 수 있습니다.

RENAME COLUMN TableName.OldName TO NewName;

이것은 SQL 표준에서 문제를 해결하기 전에 구현되었습니다 (SQL 표준에서 해결 된 경우). SQL 9075 : 2003 표준의 사본은 표준으로 표시되지 않습니다 (다른 것들 중에서 RENAME은 키워드 중 하나가 아닙니다). 실제로 SQL 9075 : 2008인지 여부는 모르겠습니다.


2
SQL 2008 초안에서도 RENAME이 없습니다.
Nicolas Buduroi 2009

AS가 아님-TO를 사용하십시오. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi

6

SQL Server에서는 다음을 사용할 수 있습니다.

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

또는

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

6

다음 명령을 사용하여 SQL Server에있는 테이블의 열 이름을 바꿀 수 있습니다.

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

3

ALTER TABLE은 표준 SQL입니다. 그러나 많은 데이터베이스 시스템에서 완전히 구현되지는 않았습니다.


그가 자세한 설명을했기 때문에 나는 보츠의 대답을 받아 들였습니다. 그럼에도 불구하고 나는 당신을 찬성했습니다.
MetroidFan2002

@ MetroidFan2002- "ALTER TABLE"이 단지 PostgreSQL이 아니라 매우 일반적이라는 사실을 인정하기 위해 내 답변을 추가했을뿐입니다.
Paul Tomblin

2

표준은 ALTER TABLE이지만 접할 가능성이있는 모든 DBMS에서 반드시 지원되는 것은 아니므로 모든 것을 포괄하는 구문을 찾고 있다면 운이 좋지 않을 수 있습니다.


0

또는 SQL테이블 디자인 패널의 Microsoft SQL Server Management Studio에서이 작업을 수행 할 수 있습니다.

첫 번째 방법

열을 천천히 두 번 클릭합니다. 열 이름은 편집 가능한 텍스트 상자가됩니다.

두 번째 방법

SqlManagement Studio >> 데이터베이스 >> 테이블 >> specificTable >> 열 폴더 >> 열을 마우스 오른쪽 버튼으로 클릭 >> Reman

세 번째 방법

표 >> RightClick >> 디자인

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.