DDL (DATA DEFINITION LANGUAGE) : 데이터 정의 언어
오라클에서 제공하는 객체(OBJECT)를
새로이 만들고(CREATE), 구조를 변경하고(ALTER), 구조자체를 삭제하는 (DROP)하는 명령문
즉, 구조자체를 정의하는 언어로 주로 DB관리자, 설계자가 사용함
오라클에서의 객체(구조) : 테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE)
인덱스(INDEX), 패키지(PACKAGE), 트리거(TRIGGAER)
프로시져(PROCEDUER), 함수(FUNCTION),
동의어(SYNONYM), 사용자(USER)
< CREATE TABLE >
테이블이란?
행(ROW), 열(COLUMN)로 구성되는 가장 기본적인 데이터베이스 객체
모든 데이터는 테이블을 통해서 저장됨(데이터를 보관하고자 한다면 테이블을 만들어야 함)
[표현법]
CREATE TABLE 테이블명{
컬럼명 자료형,
컬럼명 자료형,
컬럼명 자료형,
컬럼명 자료형,
컬럼명 자료형
...........
};
< 자료형 >
- 문자(CHAR()(크기) / VARCHAR2(크기)) : 크기는 BYTE 수이다.
(숫자, 영문자, 특수문자 => 1글자 당 1BYTE
한글 => 1글자 당 3BYTE)
CHAR (바이트수) : 최대 2000BYTE 까지 지정 가능
고정길이(아무리 적은값이 들어와도 공백으로 채워서 처음 할당한 크기 유지)
VARCHAR2 (바이트수) : 최대 4000BYTE까지 지정 가능
가변길이(적은 값이 들어오면 그 담긴 값에 맞춰 크기가 줄어든다.)
VAR는 '가변'을 의미, 2는 '2배'를 의미한다.
- 숫자 (NUMBER) : 정수/실수 상관없이 NUMBER
- 날짜 (DATE)
컬럼에 주석 달기 (컬럼에 대한 설명)
COMMENT ON COLUMN 테이블명.컬럼명 IS '주석 내용';
- 데이터 딕셔너리 : 다양한 객체들의 정보를 저장하고 있는 시스템 테이블
- USER_TABLES : 현재 이 계정이 가지고 있는 테이블의 전반적인 구조를 확인할 수 있는 데이터 딕셔너리
-- 데이터를 추가할 수 있는 구문(INSERT : 한 행으로 추가, 값의 순서 중요)
-- INSERT INTO 테이블명 VALUES(첫 번째 컬럼의 값, 두번째 컬럼의 값, 세번째.....);
위의 NULL값이나 중복된 아이디값은 유효하지 않은 값들이다.
유효한 데이터값을 유지하기 위해서 제약조건을 걸어줘야 한다.
< 제약 조건 >
- 종류 : NOT NULL, NIQUE, CHECK, PRIMARY KEY, FOREIGN KEY
- 원하는 데이터값만을 유지하기 위해서(보관하기 위해서) 특정 컬럼마다 설정하는 제약
(데이터 무결성 보장을 목적으로)
- 제약조건 부여된 컬럼에 들어올 데이터에 문제가 없는지 자동으로 검사할 목적
- 컬럼에 제약조건을 부여한는 방식 : 컬럼레벨 / 테이블레벨
1. NOT NULL 제약조건
해당 컬럼에 반드시 값이 존재해야만 할 경우(NULL값이 절대 들어와서는 안되는 컬럼)
삽입 / 수정 시 NULL값을 허용하지 않도록 제한
단, NOT NULL 제약조건은 컬럼레벨 방식 밖에 안됨
2. UNIQUE 제약조건
컬럼에 중복값을 제한하는 제약조건
삽입 / 수정 시 기존에 해당 컬럼값중에 중복값이 있을 경우 추가 또는 수정이 되지 않게 제약!
컬럼레벨 / 테이블레벨 방식 둘 다 가능
테이블 삭제하기!
※ 제약조건 부여시 제약조건명도 지정하는 표현식
> 컬럼레벨 방식
CREATE TABLE 테이블명(
컬럼명 자료형 CONSTRAINT 제약조건명 제약조건,
컬러명 자료형,
컬러명 자료형,
....
);
> 테이블레벨 방식
CREATE TABLE 테이블명(
컬러명 자료형,
컬러명 자료형,
컬럼명 자료형,
...
CONSTRAINT 제약조건명 제약조건 (컬럼명)
);
3. CHECK 제약조건
컬럼에 기록될 수있는 값에 대한 조건을 설정해 둘 수 있다.
CHECK (조건식)
번외) 특정 컬럼에 들어올 값에 대한 기본값 설정! => 제약조건은 아님
4. PRIMARY KEY (기본키) 제약조건
테이블에서 각 행들의 정보를 유일하게 식별할 수 있는 컬럼에 부여하는 제약조건
=> 각 행들을 구분할 수 있는 식별자의 역할
예) 회원번호, 주문번호, 사번, 학번, 예약번호
=> 중복되지 않고 값이 존재해야만 하는 컬럼에 PRIMARY KEY부여 (UNIQUE + NOT NULL)
★한 테이블 당 한개의 컬럼만 설정 가능
5. FOREIGN KEY (외래키)제약 조건
해당 컬럼에 다른 테이블에 존재하는 값만 들어와야 될 때 부여하는 제약조건
=> 다른 테이블 (부모테이블)을 참조한다고 표현
즉, 참조된 다른 테이블이 제공하고 있는 값만 들어올 수 있다.
=> FOREIGN KEY 제약조건으로 다른 테이블간의 관계를 형성할 수 있음
[ 표현법 ]
- 컬럼레벨 방식
컬럼명 자료형 CONSTRAINT 제약조건명 REFERENCES 참조할테이블명(참조할컬럼명)
- 테이블레벌 방식
CONSTRAINT 제약조건명 FOREIGN KEY(컬럼명) REFERENCES 참조할테이블명(참조할컬럼명)
두 방식 모두 참조할 컬럼명을 생략이 가능하다!!
생략 시 기본적으로 참조할 테이블의 PRIMARY KEY 컬럼으로 참조할 컬럼명이 잡힌다.
문제) 부모테이블 (MEM_GRADE)에서 데이터값이 삭제된다면??
자식테이블 중에 컬럼값을 사용하고 있기 때문에 삭제할 수 없음
외래키 제약조건 부여시 삭제옵션을 부여하지 않았음
자식테이블에서 사용하고 있는 값이 있을 경우 삭제가 안되는 "삭제제한옵션"이 걸려있음
자식 테이블 생성 시 (외래키 제약조건 부여 시)
부모테이블의 데이터가 삭제 되었을 때 자식테이블에는 어떻게 처리할지 옵션으로 정할 수 있음
*FOREIGN KEY 삭제 옵션
삭제 옵션을 별도로 지정하지 않으면 ON DELETE RESTRICTED(삭제 제한)으로 기본설정
1. ON DELETE SET NULL
부모데이터 삭제 시 해당 데이터를 사용하고 있는 자식데이터를
NULL로 변경시키는 옵션
2. ON DELETE CASCADE
부모데이터 삭제 시 해당 데이터를 사용하고 있는
데이터도 같이 삭제해버리는 옵션
'*SQL_Oracle*' 카테고리의 다른 글
DML <INSERT, UPDATE, DELETE> (0) | 2021.11.11 |
---|---|
DDL <CREATE> SUBQUERY를 이용한 테이블생성 (0) | 2021.11.10 |
DML < SELECT > SUBQUERY(서브쿼리) (0) | 2021.11.06 |
DML < SELECT > GROUP BY , HAVING , 집합 연산자 (0) | 2021.11.06 |
DML < SELECT> JOIN (0) | 2021.11.05 |