하나의 ALTER TABLE
명령문 에서 단일 테이블의 여러 열을 삭제하는 단일 SQL 명령을 작성하고 싶습니다 .
에서 MSDN의 ALTER 표 문서 …
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
constraint_name 또는 column_name이 테이블에서 제거되도록 지정합니다. 호환성 수준이 65 이하인 경우 DROP COLUMN을 사용할 수 없습니다. 여러 열과 제약 조건을 나열 할 수 있습니다.
명령문에 여러 열을 나열 할 수 있지만 구문에는 선택적 쉼표 또는 구문을 암시하는 것도 표시되지 않습니다.
한 문장에서 여러 열을 삭제하려면 SQL을 어떻게 작성해야합니까 (가능한 경우)?
답변
SQL Server의 경우 :
ALTER TABLE TableName
DROP COLUMN Column1, Column2;
문법은
DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ]
MySQL의 경우 :
ALTER TABLE TableName
DROP COLUMN Column1,
DROP COLUMN Column2;
또는 이와 같이 1 :
ALTER TABLE TableName
DROP Column1,
DROP Column2;
1 단어 COLUMN
는 선택 사항 이며 RENAME COLUMN
(열 이름 바꾸기 작업과 RENAME
테이블 이름 바꾸기 작업을 구분하기 위해) 제외하고 생략 할 수 있습니다 . 자세한 내용은 여기를 참조하십시오 .
답변
요약
오라클 :
ALTER TABLE table_name DROP (column_name1, column_name2);
ALTER TABLE table_name DROP COLUMN column_name1, column_name2
MySQL :
ALTER TABLE table_name DROP column_name1, DROP column_name2;
ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;
알고
DROP COLUMN
일부 DBMS에 대한 데이터를 물리적으로 제거 하지 않습니다 . 예를 들어 MS SQL의 경우. 고정 길이 유형 ( int , numeric , float , datetime , uniqueidentifier 등)의 경우 열이 삭제 된 후 추가 된 레코드에도 공간이 사용됩니다. 낭비되는 공간을 없애려면해야 ALTER TABLE ... REBUILD
합니다.
답변
create table test (a int, b int , c int, d int);
alter table test drop column b, d;
DROP COLUMN은 데이터를 물리적으로 제거하지 않으며 고정 길이 유형 (int, numeric, float, datetime, uniqueidentifier 등)의 경우 열이 삭제 된 후 추가 된 레코드에 대해서도 공간이 소비됩니다. 낭비되는 공간을 없애려면해야 ALTER TABLE ... REBUILD
합니다.
답변
늦었을 수 있지만이 질문을 방문하는 새로운 사용자를 위해 공유 할 수 있습니다. 여러 열을 삭제하려면 실제 구문은
alter table tablename drop column col1, drop column col2 , drop column col3 ....
따라서 모든 열에 대해 Mysql 5.0.45에서 “drop column”을 지정해야합니다.
답변
ALTER 문의 열 부분을 삭제하기 위해 Microsoft에서 지정한 구문 은 다음과 같습니다.
DROP
{
[ CONSTRAINT ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN
{
column_name
} [ ,...n ]
} [ ,...n ]
[, … n]은 열 이름 뒤에 그리고 전체 drop 절 끝에 나타납니다. 이것은 여러 열을 삭제하는 두 가지 방법이 있다는 것을 의미합니다. 다음 중 하나를 수행 할 수 있습니다.
ALTER TABLE TableName
DROP COLUMN Column1, Column2, Column3
아니면 이거
ALTER TABLE TableName
DROP
COLUMN Column1,
COLUMN Column2,
COLUMN Column3
이 두 번째 구문은 열 삭제를 제약 조건 삭제와 결합하려는 경우에 유용합니다.
ALTER TBALE TableName
DROP
CONSTRAINT DF_TableName_Column1,
COLUMN Column1;
열을 삭제하는 경우 SQL Server는 삭제 된 열이 차지하는 공간을 회수하지 않습니다. 행에 인라인으로 저장된 데이터 형식 (예 : int)의 경우 alter 문 뒤에 추가 된 새 행에서 공간을 차지할 수도 있습니다. 이 문제를 해결하려면 테이블에서 클러스터형 인덱스를 만들거나 클러스터형 인덱스가 이미있는 경우 다시 만들어야합니다. 테이블을 수정 한 후 REBUILD 명령으로 인덱스를 다시 작성할 수 있습니다. 그러나 매우 큰 테이블에서는 이것이 느릴 수 있습니다. 예를 들면 다음과 같습니다.
ALTER TABLE Test
REBUILD;
답변
MySQL (버전 5.6)의 경우 하나의 단일 drop
문으로 여러 열 삭제를 수행 할 수없고 여러 문으로 수행 할 수 없습니다 drop
.
mysql> alter table test2 drop column (c1,c2,c3);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(c1,c2,c3)' at line 1
mysql> alter table test2 drop column c1,c2,c3;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c2,c3' at line 1
mysql> alter table test2 drop column c1, drop column c2, drop c3;
Query OK, 0 rows affected (0.64 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
위에서 볼 수 있듯이 BTW drop <col_name>
는 속기입니다 .drop column <col_name>
drop c3
답변
단일 구문 인 경우 아래 구문을 삭제하면 작동합니다.
ALTER TABLE tablename DROP COLUMN column1;
여러 열을 삭제하려면 DROP COLUMN
작동하지 않습니다. 아래 구문이 작동합니다.
ALTER TABLE tablename DROP (column1, column2, column3......);