최보름달

[SQL] ALTER TABLE 본문

문송한 회사생활/SQL 공부

[SQL] ALTER TABLE

PieMoon 2020. 7. 28. 21:45

ALTER TABLE

컬럼을 추가/삭제하거나 제약조건을 추가/삭제하는 경우

- ALTER TABLE ADD 

- ALTER TABLE DROP

- ALTER TABLE MODIFY 

- ALTER TABLE RENAME TO

- ALTER TABLE DROP CONSTRAINT

- ALTER TABLE ADD CONSTRAINT

 

 

 

ADD COLUMN

칼럼을 추가하는 명령

ALTER TABLE      테이블명
ADD              추가할 컬럼명     데이터유형 ; 

새롭게 추가된 컬럼은 테이블의 마지막 컬럼이 된다. (컬럼 위치를 지정할 수 없다.)

-- PLAYER 테이블에 ADDRESS 컬럼을 추가하는 예시

-- ORACLE
ALTER TABLE     PLAYER
ADD             (ADDRESS VARCHAR2(80)) ;

--SQL SERVER
ALTER TABLE     PLAYER
ADD             ADDRESS VARCHAR(80) ;

 

DORP COLUMN

컬럼을 삭제하는 명령

한번에 하나의 컬럼만 삭제 가능하며, 컬럼 삭제 후 최소 하나 이상의 컬럼이 남아있어야 한다. 

삭제하면 복구 불가하니 주의!

ALTER TABLE     테이블명
DROP COLUMN    삭제할 컬럼명 ; 

예시

-- PLAYER 테이블에 ADDRESS 컬럼을 삭제

-- ORACLE
ALTER TABLE     PLAYER
DROP COLUMN     ADDRESS ;

--SQL SERVER
ALTER TABLE     PLAYER
DROP COLUMN     ADDRESS ;

 

MODIFY COLUMN

컬럼의 데이터 유형, 디폴트, NOT NULL 제약조건을 변경하는 명령. (컬럼의 정의를 변경함)

-- ORACLE
ALTER TABLE  테이블명
MODIFY       (컬럼명1 데이터유형 [DEFAULT 식] [NOT NULL],
              컬럼명2 데이터유형 ...) ;
              
              
 -- SQL SERVER
ALTER TABLE  테이블명
ALTER       (컬럼명1 데이터유형 [DEFAULT 식] [NOT NULL],
              컬럼명2 데이터유형 ...) ;

 

컬럼 변경시 주의할 점!

- 컬럼의 크기를 늘리는 것은 가능하지만, 줄이지는 못한다. 

- 컬럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 컬럼의 폭을 줄일 수 있다. 

- 컬럼이 NULL 값만 가지고 있으면 데이터 유형을 변경할 수 있다. 

- 컬럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.

- 해당 컬럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다. 

 

예시

-- TEAM_TEMP 테이블의 ORIG_YYYY컬럼의 데이터 유형을 변경하고, 디폴트를 20020129로 지정한다. 

-- ORACLE
ALTER TABLE  TEAM_TEMP
MODIFY       (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
              
              
 -- SQL SERVER
ALTER TABLE  TEAM_TEMP
ALTER        COLUMN ORIG_YYYY VARCHAR(8) NOT NULL;

ALTER TABLE     TEAM_TEMP
ADD CONSTRAINT  DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY ;



 

RANAME COLUMN 

컬럼명을 변경하는 명령

-- ORACLE
ALTER TABLE     테이블명
RENAME COLUMN   변경해야 할 컬럼명  TO  새로운 컬럼명 ; 

--SQL SERVER
sp_rename 변경해야 할 컬럼명, 새로운 컬럼명, 'COLUMN' ;

오라클 등 일부 DBMS에서만 지원하는 기능이다. 

 

예시

-- ORACLE
ALTER TABLE    PLAYER
RENAME COLUMN  TEMP_ID  TO  PLAYER_ID ;


-- SQL SERVER
sp_rename 'dbo.TEAM_TEMP.TEAM_ID', 'TEAM_TEMP_ID', 'COLUMN';

 

 

DROP CONSTRAINT 

제약조건을 삭제하는 명령

ALTER TABLE       테이블명
DROP CONSTRAINT   제약조건명 ;

예시

-- ORACLE
ALTER TABLE       PLAYER
DROP CONSTRAINT   PLAYER_FK ;


-- SQL SERVER
ALTER TABLE       PLAYER
DROP CONSTRAINT   PLAYER_FK ;

 

 

ADD CONSTRAINT

제약조건을 추가하는 명령

ALTER TABLE       테이블명
ADD CONSTRAINT   제약조건명 제약조건 (컬럼명) ;

예시

-- PLAYER 테이블에 TEAM 테이블과의 외래키 제약조건을 추가
-- 제약조건명은 PLAYER_FK 리고 
-- PLAYER 테이블의 TEAM_ID 컬럼이 TEAM 테이블의 TEAM_ID를 참조하는 조건이다. 

-- ORACLE
ALTER TABLE       PLAYER
ADD CONSTRAINT    PLAYER_FK 
FOREIGN KEY (TEAM_ID) REFERNCES TEAM(TEAM_ID) ;



-- SQL SERVER
ALTER TABLE       PLAYER
ADD CONSTRAINT    PLAYER_FK
FOREIGN KEY (TEAM_ID) REFERNCES TEAM(TEAM_ID);

 

이때 PLAYER 테이블이 참조하는 TEAM 테이블을 삭제하려고 하면, 외래키에 의해 참조되는 키가 있으므로 삭제되지 않는다.

이것을 참조 무결성 옵션 이라고 한다. 

TEAM 테이블의 데이터를 삭제하려고 할 때 외부 테이블(PLAYER 테이블)참조되는 값이 있다면 삭제할 수없다. 

 

 

 

 

 

* 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다