Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[SQL] 테이블 수정 본문
ALTER TABLE 명령
- ALTER TABLE 문을 사용하여 테이블 구조를 변경
- ALTER TABLE 문을 사용하는 작업
- 새 열 추가
- 기존 열 수정
- 열의 기본값 정의
- 열의 이름 수정
- 열 삭제
기존 테이블에 새 열의 추가
- ALTER TABLE 문을 사용하여 기존 테이블에 열을 추가
- 새 열은 테이블의 마지막 열이 됨
- 추가된 새 열의 모든 행은 초기에 NULL 값을 가지며 값을 채우고자 한다면 UPDATE 수행
- 구문
ALTER TABLE table명
ADD (column datatype [DEFAULT 표현식]
[, column datatype]...);
- position 열을 dept200 테이블에 추가
- position 열이 가장 마지막 열이고 값은 모두 NULL
ALTER TABLE dept200
ADD (position VARCHAR2(10));
DESC dept200;
SELECT * FROM dept200;
기존 테이블의 열 수정
- ALTER TABLE 문을 MODIFY 절과 함께 사용하여 열 정의 수정
- 테이블이 정의된 열의 데이터 유형, 크기 및 기본값 등의 수정
- 구문
ALTER TABLE table명
MODIFY (column datatype [DEFAULT 표현식]
[, column datatype]...);
- dept200 테이블의 hiredate 열의 데이터타입을 기존의 DATE 타입에서 TIMESTAMP 타입으로 변경
ALTER TABLE dept200
MODIFY hiredate TIMESTAMP;
DESC dept200;
- dept200 테이블의 position 열의 기본값을 '사원'으로 변경
ALTER TABLE dept200
MODIFY position DEFAULT '사원';
SELECT * FROM dept200;
- dept200 테이블의 기존 행들에 대해 position의 값을 지정된 기본값으로 수정
UPDATE dept200
SET position = DEFAULT;
COMMIT;
SELECT * FROM dept200;
기존 열의 이름 수정
- ALTER TABLE 명령을 RENAME COLUMN 절과 함께 사용하여 열의 이름을 수정
- 열 이름 수정이 필요한 경우
- 열의 이름이 응용프로그램 관련 적합하지 않거나 너무 긴 경우
- 구문
ALTER TABLE table명
RENAME COLUMN old_column_name TO new_column_name;
- dept200 테이블의 emp_name 열의 이름을 ename으로 변경
ALTER TABLE dept200
RENAME COLUMN emp_name TO ename;
DESC dept200;
테이블로부터 열의 삭제
- ALTER TABLE 문을 DROP COLUMN 절과 함께 사용
- 열 삭제 고려사항
- 열에 데이터가 포함되어 있는지 여부와 상관없이 수행
- 삭제된 열은 ROLLBACK 불가
- DROP COLUMN 작업은 다른 ALTER TABLE 명령문과 다르게 실행에 소요되는 시간이 테이블의 행수에 비례하여 소요됨
- 구문
ALTER TABLE table명
DROP COLUMN column_name;
SET UNUSED 옵션
- ALTER TABLE 명령문에 SET UNUSED 옵션 사용
- 하나 이상의 열을 UNUSED로 표시한 후 DROP UNUSED COLUMNS 옵션을 사용하여 여러 열을 한꺼번에 제거 가능
- UNUSED로 표시된 열은 테이블의 행에 열 데이터가 남아 있지만 삭제된 것으로 처리
- 단순히 "사용 안함"으로 처리만 하는 방식으로 DROP 절 실행 시 데이터 삭제에 소요되는 응답 시간 향상 효과
- SET UNUSED 옵션 고려 사항
- 사용자 입장에서는 열이 제거된 것과 동일
- ROLLBACK 불가
- dept200 테이블에서 hiredate 열을 삭제한 후 확인
ALTER TABLE dept200
DROP COLUMN hiredate;
DESC dept200;
- dept200 테이블의 annsal 열과 position 열을 UNUSED COLUMN으로 표시
ALTER TABLE dept200
SET UNUSED (annsal, position);
DESC dept200;
SELECT * FROM dept200;
- dept200 테이블에서 UNUSED로 표시된 모든 열을 제거
ALTER TABLE dept200
DROP UNUSED COLUMNS;
테이블 READ ONLY 설정
- Oracle Database 11g 부터 테이블을 읽기 전용 모드로 설정 가능
- 테이블의 DML 문은 불가능
- DROP TABLE과 같은 DDL 문은 실행 가능
- ALTER TABLE ~ READ WRITE 명령 읽기, 쓰기 모드 전환 가능
- 구문
ALTER TABLE table명
[READ ONLY | READ WRITE];
- emp300 테이블을 READ ONLY로 설정한 후 DML을 실행
- UPDATE 시도를 하면 오류
ALTER TABLE emp300 READ ONLY;
UPDATE emp300
SET salary = salary*1.1;
- emp300 테이블을 다시 READ WRITE로 변경
ALTER TABLE emp300 READ WRITE;
'Oracle SQL' 카테고리의 다른 글
[SQL] 제약 조건 (0) | 2023.06.02 |
---|---|
[SQL] 테이블 삭제 (0) | 2023.06.02 |
[SQL] 테이블의 생성과 관리 (0) | 2023.05.31 |
[SQL] 데이터베이스 트랜잭션 (0) | 2023.05.30 |
[SQL] 데이터 조작어 (DML) (0) | 2023.05.02 |
Comments