DDL (Data Definition Language) 데이터 정의 언어

김민석·2023년 8월 28일
0

객체(OBJECT)를 만들고(CREATE), 수정(ALTER)하고, 삭제(DROP) 등 데이터의 전체 구조를 정의하는 언어로 주로 DB관리자, 설계자가 사용한다.

  • 오라클에서의 객체
    테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE),인덱스(INDEX), 패키지(PACKAGE), 트리거(TRIGGER), 프로시져(PROCEDURE), 함수(FUNCTION), 동의어(SYNONYM), 사용자(USER)

CREATE

테이블이나 인덱스, 뷰 등 다양한 데이터베이스 객체를 생성하는 구문
테이블로 생성된 객체는 DROP구문을 통해 제거할 수 있다.

  • 작성법
CREATE TABLE 테이블명 (
        컬럼명 자료형(크기), 
        컬럼명 자료형(크기),
        ...);
  • 컬럼에 주석 달기
COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';
  • 서브쿼리를 이용한 테이블 생성
    컬럼명, 데이터 타입, 값이 복사되고, 제약조건은 NOT NULL만 복사됨
    데이터가 없는 빈 테이블로 복사하고 싶으면 조건식의 결과를 무조건 FALSE로 만들어라
CREATE TABLE 테이블명
AS 서브쿼리;
  • 자료형
    NUMBER : 숫자형(정수, 실수)
    CHAR(크기) : 고정길이 문자형 (2000BYTE)
    -> ex) CHAR(10) 컬럼에 'ABC' 3BYTE 문자열만 저장해도 10BYTE 저장공간을 모두 사용.
    VARCHAR2(크기) : 가변길이 문자형 (4000 BYTE)
    -> ex) VARCHAR2(10) 컬럼에 'ABC' 3BYTE 문자열만 저장하면 나머지 7BYTE를 반환함.
    DATE : 날짜 타입
    BLOB : 대용량 이진 데이터 (4GB) (Byte Long Of Byte)
    CLOB : 대용량 문자 데이터 (4GB) (Charater Long Of Byte)

CONSTRAINTS (제약 조건)

사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약.
데이터 무결성 보장을 목적으로 함.

NOT NULL

해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용
삽입/수정시 NULL값을 허용하지 않도록 컬럼레벨에서 제한
NOT NULL은 컬럼 레벨만 지정 가능하다.

CREATE TABLE 테이블명(
    컬럼명 자료형 NOT NULL,
    컬럼명 자료형,
    ...
);

UNIQUE

컬럼에 입력 값에 대해서 중복을 제한하는 제약조건
컬럼 레벨에서 설정 가능, 테이블 레벨에서 설정 가능
단, UNIQUE 제약 조건이 설정된 컬럼에 NULL 값은 중복 삽입 가능

CREATE TABLE 테이블명(
    -- 컬럼 레벨
    컬럼명 자료형 UNIQUE,
    컬럼명 자료형 CONSTRAINT 제약조건명 UNIQUE,
    -- 테이블 레벨
    UNIQUE(컬럼명),
	CONSTRAINT 제약조건명 UNIQUE(컬럼명)
);

UNIQUE 복합키

두 개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약조건을 설정한다.
지정된 모든 컬럼의 값이 일치해야 중복으로 판단
복합키는 테이블 레벨로만 설정 가능하다.

CONSTRAINT 제약조건명 UNIQUE(컬럼명1, 컬럼명2, ...)

PRIMARY KEY(기본키)

테이블에서 한 행의 정보를 찾기위해 사용할 컬럼을 의미한다.
테이블에 대한 식별자 역할을 한다.
NOT NULL + UNIQUE 제약조건의 의미를 가진다
컬럼 레벨, 테이블 레벨 둘 다 설정 가능
여러 개의 컬럼을 묶어서 설정할 수 있다.

CREATE TABLE 테이블명(
	-- 컬럼 레벨
    컬럼명 자료형 PRIMARY KEY,
    컬럼명 자료형 CONSTRAINT 제약조건명 PRIMARY KEY,
    
    -- 테이블 레벨
    컬럼명 자료형
    , PRIMARY KEY(컬럼명)
    , CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명1 [, 컬럼명2, ...])
);

FOREIGN KEY(외부키/외래키)

참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음
이는 특정 값에 대한 중복을 제거하고(무결성 유지)
두 테이블이 같은 컬럼 값을 지니기에 JOIN을 활용할 수 있다
제공되는 값 외에는 NULL을 사용할 수 있음
FOREIGN KEY 제약조건에 의해서 테이블간의 관계(RELATIONSHIP)가 형성됨

-- 컬럼 레벨
컬럼명 자료형(크기) [CONSTRAINT 제약조건명] REFERENCES 참조할 테이블명 [(참조할 컬럼)] [삭제룰]

-- 테이블 레벨
[CONSTRAINT 제약조건명] FOREIGN KEY (적용할컬럼명) REFERENCES 참조할 테이블명 [(참조할 컬럼)] [삭제룰]

참조할 컬럼 미지정시 그 테이블의 PRIMARY KEY로 설정된 컬럼이 지정됨

  • FOREUGN KEY 삭제룰
  1. ON DELETE RESTRICTED (기본 지정)
    FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제하지 못함
  2. ON DELETE SET NULL
    부모키 삭제 시 자식키를 NULL로 변경하는 옵션
  3. ON DELETE CASCADE
    부모키 삭제 시 자식키도 함께 삭제
    부모키 삭제시 값을 사용하는 자식 테이블의 컬럼에 해당하는 행이 삭제가 됨

CHECK

컬럼에 기록되는 값에 조건 설정을 할 수 있음
비교값은 리터럴만 사용할 수 있음, 변하는 값이나 함수 사용 불가

-- 컬럼 레벨
컬럼명 자료형 [CONTRAINTS 제약조건명] CHECK(컬럼명 비교연산자 비교값)

-- 테이블 레벨
[CONTRAINTS 제약조건명] CHECK(컬럼명 비교연산자 비교값)

ALTER

테이블에 정의된 내용을 수정할 때 사용하는 데이터 정의어로
컬럼의 추가/삭제, 제약조건의 추가/삭제, 컬럼의 자료형 변경, DEFAULT 값 변경,
테이블 명/컬럼 명/제약 조건 명 변경 등을 할 수 있음

제약조건 추가 / 삭제

제약조건 추가

ALTER TABLE 테이블명
ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명) [REFERENCES 테이블명[(컬럼명)]];

제약조건 삭제

ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;

NOT NULL 제약조건은 다루는 방법이 다르다

ALTER TABLE 테이블명 MODIFY 컬럼명 [NOT] NULL;

컬럼 추가/수정/삭제

컬럼 추가

ALTER TABLE 테이블명 ADD(컬럼명 데이터타입 [DEFAULT '값']);

컬럼 수정

ALTER TABLE 테이블명 MOIDFY 컬럼명 데이터타입;   (데이터 타입 변경)
ALTER TABLE 테이블명 MOIDFY 컬럼명 DEFAULT '값'; (기본값 변경)
  • 데이터 타입 수정 시 컬럼에 저장된 데이터 크기 미만으로 변경할 수 없다

컬럼 삭제

ALTER TABLE 테이블명 DROP (삭제할컬럼명);
ALTER TABLE 테이블명 DROP COLUMN 삭제할컬럼명;
  • 테이블에는 최소 1개 이상의 컬럼이 존재해야 하기 때문에 모든 컬럼을 삭제할 순 없다.

이름 변경

컬럼명

ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경명;

제약조건명

ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건명 TO 변경명;

테이블명

ALTER TABLE 테이블명 RENAME TO 변경명;

DROP

테이블 삭제

DROP TABLE 테이블명 [CASCADE CONSTRAINTS];
  • CASCADE CONSTRAINTS
    제약조건까지 모두 삭제하기 때문에 FK 제약조건이 있어도 삭제할 수 있다.

0개의 댓글