CS - 강의, 서적/[SQLD] 홍쌤의 데이터랩

[SQLD] 2-19. SQL2 (DDL, CTAS, PURGE, 제약 조건)

SH3542 2024. 9. 21. 20:32

[홍쌤의 데이터랩, SQLD n과목 완벽 정리] 영상를 개인이 정리하여 [원작자의 허가 이후] 올린 글이며,

[개인이 추가로 정리한 내용]이 포함되어 있습니다.

 

 

 
 

홍쌤의 데이터랩

[개정판] SQLD n과목 완벽 정리

https://www.youtube.com/watch?v=rdfHFnqVoRw

 

 


 

 

목차

 

    DDL (Data Definition Language)

    - AUTO COMMIT 특성을 가지며, 이에 따라 TRUNCATE가 DDL로 분류 됨에 주의

     

    1. CREATE

    - 테이블, 인덱스 등과 같은 객체 생성

     

    CTAS (Create Table As Select)

    - 소스(원본) 테이블을 기반으로 새 테이블을 만드는 방식

    - 공식적인 패턴이나 방법론이라기 보다는, 현업에 자주 사용되는 일종의 트릭

    - 사용되는 SQL구문의 앞자리를 따 CTAS라 부름

     

    - 소스테이블의 컬럼명, 컬럼타입이 복제

    인스턴스 및 NULL속성도 복제

    - SELECT절에서 컬럼에 별칭 사용 시 => 별칭으로 컬럼 생성

    - CREATE절에서 컬럼명 변경 가능

    - 소스테이블의 제약조건, INDEX 등은 복제되지 않음

    항상 false인 조건식을 지정하면 인스턴스를 제외하고 복제 가능

     

    e.g.

     

    1) 테이블 형식 및 인스턴스 복제

    CREATE TABLE 새테이블

    AS

    SELECT *

    FROM 소스테이블;

     

    2) 테이블 형식 복제

    CREATE TABLE 새테이블

    AS

    SELECT *

    FROM 소스테이블

    WHERE 1=2; -- 항상 false인 조건식

     

    3-1) 컬럼명 변경하여 복제 - CREATE절에 기입

    CREATE TABLE 새테이블(nc1,nc2)

    AS

    SELECT c1, c2

    FROM 소스테이블;

     

    3-2) 컬럼명 변경하여 복제 - SELECT절에 기입 + Alias 사용

    CREATE TABLE 새테이블

    AS

    SELECT c1 [as] nc1, c2 [as] nc2

    FROM 소스테이블;

     

    2. ALTER

    - 테이블 구조 변경(컬럼명, 타입, 사이즈, 기본 값, 컬럼 삭제, 컬럼 추가, 제약조건)

    - 컬럼순서는 변경 불가(재생성 해야 함)

     

    e.g.

    ALTER TABLE ~ MODIFY ~;

    ALTER TABLE ~ ADD ~;

    ALTER TABLE ~ RENAME COLUMN ~ TO ~;

     

    1. 컬럼 추가

    - 새로 추가된 컬럼 위치는 항상 마지막 (중간 삽입 불가능)

    - 데이터 타입 필수, 기본 값 및 제약조건 선택

    - 여러 컬럼 동시 추가 가능 => 괄호 사용 필수

    - 기본 값 할당하지 않을 시, NOT NULL 제약조건 할당 불가

    => 기본값 없이 새 컬럼 생성 시 NULL이 할당되므로

     

    2. 컬럼 변경

    - 컬럼 사이즈, 데이터타입, 기본 등

     

    문법

    ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [DEFAULT 기본값] [제약조건]

     

    2-1. 컬럼 사이즈 변경

    SIZE 증가 -> 항상 가능

    SIZE 감소 -> 할당하려는 SIZE보다 큰 인스턴스(컬럼 데이터)가 없어야 함

    - 동시 변경 가능

     

    2-2. 컬럼 타입 변경

    - 빈 컬럼일 경우만 데이터 타입 변경 가능

    - 데이터가 있는 경우 => 호환되는 타입간의 변경 가능 (자료의 특성에 따라 단방향/양방향 호환 가능)

    - 동시 변경 가능

     

    2-3. 컬럼 이름 변경

    - 항상 가능

    동시 변경 불가

     

    문법

    ALTER TABLE 테이블 RENAME COLUMN 기존컬럼명 TO 새컬럼명

     

    테이블 구조 확인

    DESC 테이블명

    - DESC(Description)임에 주의 => 내림차순 DESC(Descending)이랑 약어가 같음

     

    3. 컬럼 삭제

    - 데이터 존재 여부와 상관없이 가능

    -  RECYCLEBIN에 남지 않으므로 FLASHBACK 불가

    => RECYLEBIN은 객체(테이블, 인덱스 등) 단위의 보존을 목표로 하므로 컬럼은 적용 안됨

    => 객체 단위는 RECYLEBIN에 남으며, PREGE 옵션으로 즉시 DROP 가능

    - 동시 삭제 불가능

     

    3. DROP

    - 객체 삭제

    - DROP 이후 조회 불가

     

    PURGE

    - 객체 DROP에 적용하는 옵션

    - 이후 RECYCLEBIN에서 조회 불가능

     

    e.g.

    DROP TABLE 테이블명 [PURGE];

     

    4. TRUNCATE

    - 테이블 구조를 유지한 채 모든 데이터 삭제, AUTO COMMIT

    - 이후 RECYCLEBIN에서 조회 불가능

     

    e.g.

    TRUNCATE TABLE 테이블명;

     

    DELETE/DROP/TRUNCATE 요약

     

    DELETE

    - 테이블 메타데이터 (= 구조) 유지

    - 데이터 일부/전체 삭제

    - 트랜잭션 포함, 롤백 가능 (DML)

    - 상대적으로 느림 (트랜잭션 로그 별도 기록)

     

    TRUNCATE

    - 테이블 메타데이터 유지

    - 데이터 전체 삭제

    트랜잭션 미포함, 롤백 불가능 (DDL & Auto Commit)

    - 상대적으로 빠름

     

    DROP

    - 테이블 메타데이터 삭제

    - 데이터 전체 삭제

    - 트랜잭션 미포함, 롤백 불가능 (DDL  & Auto Commit)

    - 상대적으로 빠름

     

    DELETE, DROP, TRUNCATE시 복구

    https://blog.naver.com/eatgs/221838799716

     

    제약조건

    - 데이터 무결성을 위해 각 컬럼에 적용하는 데이터 제약 장치

    - 유지보수를 위해 제약조건명 사용자 정의 권장, 지정하지 않으면 RDMBS가 임의 부여

     

    e.g.

    1) 테이블 생성 시 - 컬럼별 제약조건 부여

    CREATE TABLE 테이블명(

    컬럼명 데이터타입 [DEFAULT 기본값] [CONSTRAINT 제약조건명] 제약조건 종류,

    ...

    );

     

    2) 테이블 생성 시 - 다중 컬럼 제약조건 부여

    CREATE TABLE 테이블명(

    컬럼명1 데이터타입1 [DEFAULT 기본값],

    컬럼명2 데이터타입2 [DEFAULT 기본값],

    ...

    [CONSTRAINT 제약조건명] 제약조건 종류(컬럼명1, 컬럼명2, ...)

    );

     

    제약조건의 종류

    1. PRIMARY KEY

    - UNIQUE + NOT NULL

    - UNIQUE INDEX 생성 => UNIQUE 특성이므로

    - 복합키로 구성 가능 (다중 컬럼으로 구성 가능)

     

    2. UNIQUE

    - 중복 불허용, NULL 허용

    - UNIQUE INDEX 생성

     

    3. NOT NULL

    - 다른 제약 조건 다소 상이

    => CTAS로 복제 시 제약 조건 복사 됨

    => 이미 존재하는 컬럼에 추가시 ADD가 아닌 MODIFY 사용

     

    4. FOREIGN KEY

    - 참조 테이블의 참조 컬럼(Reference Key)가 사전에 PK나 UNIQUE인 상태여야 함

     

    1) 테이블 생성 시 참조키 지정

    CREATE TABLE 테이블명(

    컬럼명1 데이터타입1 [DEFAULT 기본값] REFERENCES 참조테이블(참조키),

    ...

    );

     

    2) 정의된 컬럼에 참조키 지정

    *상호 참조관계 등도 존재하기에 항상 부모-자식 관계는 아니지만, 이해를 위해 사용

    (참조/피참조 테이블, 연관/대상 테이블 등으로 치환 구분)

     

    ALTER TABLE 자식테이블 ADD [CONSTRAINT 제약조건명] FOREIGN KEY(자식테이블 KEY)

    REFERENCES  부모테이블(부모테이블 KEY)

     

    참조키 옵션

    - 생성 시 정의해야 하며 이후 변경 불가 (필요 시 제약조건 재생성)

     

    1. ON [DELETE/UPDATE] CASCADE : 부모 데이터 [삭제/수정] 시 자식 데이터 함께 [삭제/수정]

    2. ON [DELETE/UPDATE] SET NULL : 부모 데이터 [삭제/수정]  시 자식 데이터 NULL 지정

     

    5. CHECK

    - 사용자 정의 데이터 제약조건 부여

     

    e.g.

    CREATE TABLE 테이블명(

    컬럼명1 데이터타입1 [DEFAULT 기본값],

    컬럼명2 데이터타입2 [DEFAULT 기본값],

    ...

    [CONSTRAINT 제약조건명] CHECK (컬럼명1 >= 컬럼명2)

    -- [CONSTRAINT 제약조건명] CHECK (컬럼명1 IN(1,2,3))

    );