일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- data
- Update
- ROWNUM
- 넷플릭스
- 보울룸
- where절
- 환생
- 테이블삭제
- 데이터모델링
- 직장인일기
- 회사생활
- 직장생활
- 홈트
- ERD
- 빅데이터
- 책리뷰
- SQL
- INSERT
- 30일글쓰기
- 일기
- Drop
- constraint
- null
- 전생
- rename
- 회사싫어
- 30일챌린지
- 인덱스
- SQLD
- 도전
- Today
- Total
최보름달
[SQL] ALTER TABLE 본문
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을 요약했습니다
'문송한 회사생활 > SQL 공부' 카테고리의 다른 글
[SQL] DROP TABLE (0) | 2020.07.29 |
---|---|
[SQL] RENAME TABLE (0) | 2020.07.29 |
[SQL] 생성된 테이블 구조 확인 (0) | 2020.07.28 |
[SQL] 제약조건 CONSTRAINT, NULL, DEFAULT (0) | 2020.07.22 |
[SQL] DDL (Data Definition Language) : DATATYPE, CREATE (0) | 2020.07.22 |