[SQL] 08_DDL

밍키·2021년 1월 20일
0

DDL이란?

DDL(Data Definition Language) 테이블과 관련된 열을 생성하고 변경하고 삭제하는 데이터 정의어.

CREATE : 테이블 생성하기

CREATE TABLE 명령어는 새로운 테이블을 생성할 때 사용.

CREATE TABLE 테이블 이름 (
    열 이름 1 데이터 타입,
    열 이름 2 데이터 타입[(자릿수)],
    열 이름 3 데이터 타입 [, default, 제약 조건]
    ...
    );

기존 테이블을 복사해서 테이블 생성. 서브 쿼리 이용.

CREATE TABLE 테이블 이름
AS
SELECT 문

데이터 타입

  • 문자열
    CHAR / NCHAR - 고정 길이
    VARCHAR2 / NVARCHAR2 / CLOB - 가변 길이
  • 숫자
    NUMBER, NUMBER(전체 자릿수, 소수부 자릿수)
  • 날짜
    DATE, TIMESTAMP
  • 파일
    BLOB

제약 조건 - 추가적인 제약을 걸어주는 것

  • primary key(PK) : 기본키. 행식별 컬럼.
  • unique key(UK) : 중복 값을 가지지 못하는 컬럼. null은 가질 수 있다.
  • not null(NN) : null을 가지지 못하는 컬럼.
  • check key(CK) : 컬럼에 넣을 값의 조건을 직접 지정.
  • foreign key(FK) : 참조 컬럼. 부모 테이블의 primary key만 값으로 가지는 컬럼. => 부모 테이블 참조(조인)할 때 사용.

제약조건 설정

  • 컬럼 레벨 설정

    • 컬럼 설정에 같이 설정
  • 테이블 레벨 설정

    • 컬럼 설정뒤에 따로 설정
  • 기본 문법 : constraint 제약조건이름 제약조건타입

  • 테이블 제약 조건 조회

    • USER_CONSTRAINTS 딕셔너리 뷰에서 조회

ALTER : 테이블 수정하기

ALTER TABLE 명령어는 열을 추가, 변경, 삭제하여 테이블의 구조를 변경할 수 있다.

열 추가하기

ALTER TABLE 명령어에 ADD 절을 이용해서 열을 추가.

ALTER TABLE 테이블 이름 
	ADD ( 열 이름 1 데이터 타입,
    	  열 이름 2 데이터 타입,
          ...
    );

특징은 다음과 같다.

  • 새로운 열을 추가할 수 있지만 테이블에 있던 기존 열은 삭제할 수 없다.
  • 새로 생성되는 열은 위치를 지정할 수 없다.(테이블의 마지막에 위치한다)
  • 테이블에 이미 행이 있다면 열을 추가했을 때 새로운 열의 데이터 값은 null로 초기화된다.
  • 하나의 컬럼만 추가할 경우 ( ) 는 생략가능. 둘 이상은 괄호를 해줘야 함.

열 수정하기

ALTER TABLE 테이블이름 MODIFY (수정할 열 이름 변경설정 [, 수정할 열 이름 변경설정])
  • 하나의 컬럼만 수정할 경우 ( )는 생략 가능
  • 숫자/문자열 컬럼은 크기를 늘릴 수 있다. 보통은 늘릴때 쓴다.
  • 크기를 줄일 수 있는 경우 : 열에 값이 없거나 모든 값이 줄이려는 크기보다 작은 경우
  • 데이터가 모두 NULL이면 데이터타입을 변경할 수 있다. (단 CHAR<->VARCHAR2 는 가능.)

열 이름 바꾸기

ALTER TABLE ~ RENAME COLUMN 절을 사용하면 열 이름을 수정할 수 있다.

ALTER TABLE 테이블 이름 RENAME COLUMN 열 이름 1 TO 바꾸려는 열 이름 1;

열 삭제하기

ALTER TABLE ~ DROP COLUMN 절을 사용하여 열을 삭제할 수 있다.

ALTER TABLE 테이블 이름 DROP COLUMN 열 이름;
  • CASCADE CONSTRAINTS : 삭제하는 컬럼이 Primary Key인 경우 그 컬럼을 참조하는 다른 테이블의 Foreign key 설정을 모두 삭제한다.
  • 한번에 하나의 컬럼만 삭제 가능.
ALTER TABLE 테이블 이름 SET UNUSED (열 이름 [, ..])
ALTER TABLE 테이블 이름 DROP UNUSED COLUMNS
  • SET UNUSED 설정시 컬럼을 바로 삭제하지 않고 삭제 표시를 한다.
  • 설정된 컬럼은 사용할 수 없으나 실제 디스크에는 저장되 있다. 그래서 속도가 빠르다.
  • DROP UNUSED COLUMNS 로 SET UNUSED된 컬럼을 디스크에서 삭제한다.

제약 조건 관련 수정

-제약조건 추가

ALTER TABLE 테이블 이름 ADD CONSTRAINT 제약 조건 설정
  • 제약조건 삭제
ALTER TABLE 테이블 이름 DROP CONSTRAINT 제약 조건 이름
  • PRIMARY KEY 제거
ALTER TABLE 테이블명 DROP PRIMARY KEY [CASCADE]
  • CASECADE : 제거하는 Primary Key를 Foreign key 가진 다른 테이블의 Foreign key 설정을 모두 삭제한다.

  • NOT NULL <-> NULL 변환은 컬럼 수정을 통해 한다.

ALTER TABLE 테이블 이름 MODIFY (열 이름 NOT NULL)
ALTER TABLE 테이블 이름 MODIFY (열 이름 NULL)

TRUNCATE : 테이블의 내용 삭제하기

TRUNCATE TABLE 명령어는 테이블의 데이터를 모두 삭제하고 사용하던 기억 공간도 해제한다. 테이블에 생성된 인덱스와 같은 객체도 같이 삭제된다. 데이터는 삭제되지만 테이블의 구조는 삭제되지 않는다. 삭제된 데이터는 자동으로 커밋된다.

TRUNCATE TABLE 테이블 이름;

DROP : 테이블 삭제하기

DROP TABLE 명령어는 테이블을 완전히 삭제한다.

  • 테이블의 모든 구조와 데이터가 삭제된다.
  • DDL 명령어이므로 트랜잭션이 자동으로 커밋된다.
  • 모든 인덱스와 제약 조건이 삭제된다.
DROP TABLE 테이블 이름 [CASCADE CONSTRAINTS];
profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글