[SQL] DDL : CREATE, DROP

📁 CREATE

테이블, 인덱스, 뷰 등 데이터베이스 객체를 생성하는 구문

CREATE 객체종류 객체명

📁 CREATE TABLE

CREATE를 사용해 테이블 생성

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

 

COMMENT

컬럼에 주석을 달 수 있다.

COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';

USER_TABLES

Oracle에서는 테이블 목록을 조회하기 위한 시스템 뷰를 제공해 사용자 계정에 생성된 모든 테이블을 조회할 수 있다.

SELECT * FROM USER_TABLES;

📁 제약조건 CONSTRAINTS

데이터의 무결성을 보장하기 위해 컬럼에 들어올 수 있는 데이터를 제약하는 것
  • 입력 데이터에 문제가 없는지, 데이터의 수정/삭제가 가능한지 여부 검사
  • 하나의 컬럼에 다수의 제약조건 설정 가능

설정 방법

(1) 컬럼 레벨에서 설정

CREATE TABLE MEMBER(
	ID VARCHAR2(20) 제약조건);

(2) 테이블 레벨에서 설정

CREATE TABLE MEMBER(
	ID VARCHAR2(20),
    ...
    제약조건(컬럼명),
    제약조건(컬럼명, 컬럼명 ... )

제약조건 이름

CONSTRAINT

제약조건에 이름을 설정할 수 있다.
제약조건을 활성화/비활성화하는 등 관리하기 위해서는 이름을 설정해주는 것이 좋다.

-- 1. 컬럼 레벨에서 설정
컬럼명 자료형 CONSTRAINT 제약조건이름 제약조건
ID VARCHAR2(20) CONSTRAINT PK PRIMARY KEY

-- 2. 테이블 레벨에서 설정
CONSTRAINT 제약조건이름 제약조건(컬럼명)
CONSTRAINT PK PRIMARY KEY(ID)

📂 NOT NULL

데이터에 NULL이 입력되는 것을 허용하지 않음
컬럼 레벨에서만 제약조건을 설정할 수 있음

USER_NO NUMBER NOT NULL

📂 UNIQUE

데이터의 중복을 허용하지 않는 제약조건

복합키 사용이 가능하다.

-- 컬럼 단위에서 제약조건 설정
NICKNAME VARCHAR2(20) UNIQUE

-- 테이블 단위에서 제약조건 설정
UNIQUE KEY(ID, NICKNAME)

📂 PRIMARY KEY

NOT NULLUNIQUE의 합으로 NULL과 중복값을 허용하지 않음
컬럼의 고유 식별자, 하나의 행을 구분하는 기준으로 사용하기 위함
한 테이블당 반드시 하나의 PRIMARY KEY가 존재하도록 테이블을 구성하는 것이 바람직함

-- 컬럼 단위에서 제약조건 설정
ID VARCHAR2(20) PRIMARY KEY

-- 테이블 단위에서 제약조건 설정
PRIMARY KEY(ID)

복합키

원칙적으로 한 테이블 당 하나의 컬럼만 PRIMARY KEY로 설정될 수 있으나, 복합키 사용도 가능하다.

  • 모든 값이 NULL이 아니여야 한다.
  • 인자들 중 하나만 달라도 중복이 아닌 것으로 취급한다.
PRIMARY KEY(USER_NO, USER_ID)

📂 FOREIGN KEY

부모 테이블로부터 값을 참조할 때 사용하며, 참조되는 테이블의 컬럼에 값이 존재하면 입력이 허용된다.

  • 참조한다는 뜻의 약어 REFERENCES 사용
  • 컬럼 단위에서 설정할 경우 FOREIGN KEY 생략
  • 참조 대상이 되는 컬럼은 반드시 UNIQUEPRIMARY KEY 제약조건이 설정되어 있어야 한다.
-- 컬럼 단위에서 제약조건 설정
GRADE_CODE NUMBER REFERENCES USER_GRADE(GRADE_ID)

-- 테이블 단위에서 제약조건 설정
FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE(GRADE_ID)

📂 CHECK

저장 가능한 데이터 값의 범위, 조건을 지정해 설정한 값만 허용한다.
조건에는 자기 자신의 열만 참조할 수 있다.

-- 컬럼 단위에서 제약조건 설정
GENDER VARCHAR(10) CHECK(GENDER IN ('M', 'F'))

-- 테이블 단위에서 제약조건 설정
CHECK(GENDER IN('M', 'F'))

📁 CREATE TABLE AS

서브쿼리를 이용해 조회 결과로 테이블을 생성하는 것

  • 컬럼명, 데이터 타입, 값 복사
  • 제약조건은 NOT NULL만 복사
CREATE TABLE EMPLOYEE_COPY
AS SELECT * FROM EMPLOYEE;

📁 DROP

데이터베이스 객체를 삭제하는 구문

DROP 객체종류 객체명

제약조건 삭제

CASCADE CONSTRAINTS

테이블의 제약조건을 삭제하는 예약어

테이블을 삭제할 때 함께 해주는 것이 좋음

DROP TABLE USER_TABLE
CASCADE CONSTRAINTS;