나의 개발일지

[SQL] 테이블 수정 본문

Oracle SQL

[SQL] 테이블 수정

YoonJuHan 2023. 6. 2. 14:31

ALTER TABLE 명령

  1. ALTER TABLE 문을 사용하여 테이블 구조를 변경
  2. ALTER TABLE 문을 사용하는 작업
    1. 새 열 추가
    2. 기존 열 수정
    3. 열의 기본값 정의
    4. 열의 이름 수정
    5. 열 삭제

 

기존 테이블에 새 열의 추가

  1. ALTER TABLE 문을 사용하여 기존 테이블에 열을 추가
  2. 새 열은 테이블의 마지막 열이 됨
  3. 추가된 새 열의 모든 행은 초기에 NULL 값을 가지며 값을 채우고자 한다면 UPDATE 수행
  4. 구문
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;

 

기존 테이블의 열 수정

  1. ALTER TABLE 문을 MODIFY 절과 함께 사용하여 열 정의 수정
  2. 테이블이 정의된 열의 데이터 유형, 크기 및 기본값 등의 수정
  3. 구문
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;

 

기존 열의 이름 수정

  1. ALTER TABLE 명령을 RENAME COLUMN 절과 함께 사용하여 열의 이름을 수정
  2. 열 이름 수정이 필요한 경우
    1. 열의 이름이 응용프로그램 관련 적합하지 않거나 너무 긴 경우
  3. 구문
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;

 

테이블로부터 열의 삭제

  1. ALTER TABLE 문을 DROP COLUMN 절과 함께 사용
  2. 열 삭제 고려사항
    1. 열에 데이터가 포함되어 있는지 여부와 상관없이 수행
    2. 삭제된 열은 ROLLBACK 불가
    3. DROP COLUMN 작업은 다른 ALTER TABLE 명령문과 다르게 실행에 소요되는 시간이 테이블의 행수에 비례하여 소요됨
  3. 구문
ALTER TABLE table명
DROP COLUMN column_name;

 

SET UNUSED 옵션

  1. ALTER TABLE 명령문에 SET UNUSED 옵션 사용
    1. 하나 이상의 열을 UNUSED로 표시한 후 DROP UNUSED COLUMNS 옵션을 사용하여 여러 열을 한꺼번에 제거 가능
    2. UNUSED로 표시된 열은 테이블의 행에 열 데이터가 남아 있지만 삭제된 것으로 처리
    3. 단순히 "사용 안함"으로 처리만 하는 방식으로 DROP 절 실행 시 데이터 삭제에 소요되는 응답 시간 향상 효과
  2. SET UNUSED 옵션 고려 사항
    1. 사용자 입장에서는 열이 제거된 것과 동일
    2. 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