자원을 효율적으로 관리하기 위한 다양한 정보를 저장한 시스템 테이블
- SELECT * FROM USER_CONSTRAINTS;
사용자가 작성한 제약 조건을 검색하는 구문- SELECT * FROM USER_TABLES;
사용자가 지정한 테이블을 검색하는 구문
이와 같은 데이터는 데이터 딕셔너리에 저장되어 있다
객체를 만들고 수정하고 삭제하는 등 데이터 전체 구조를 정의하는 언어
테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 프로시져(PROCEDURE), 패키지(PACKAGE), 트리거(TRIGGER), 함수(FUNCTION), 동의어(SYNONYM), 사용자(USER)
테이블이나 인덱스, 뷰 등 데이터베이스의 객체를 생성하는 구문. 주로 테이블을 생성할 때 사용
CREATE TABLE 테이블명 (
컬럼명 자료형(크기) [제약조건]
컬럼명 자료형(크기) [제약조건]
컬럼명 자료형(크기) [제약조건]
...
);
NUMBER : 숫자형(정수, 실수)
CHAR(크기) : 고정길이 문자형 (2000 BYTE)
크기를 지정해서 변경되지 않는다. 10바이트로 지정하면 3바이트 문자만 저장해도 10바이트를 모두 사용
VARCHAR2(크기) : 가변길이 문자형 (4000 BYTE)
지정한 크기에서 사용한 크기 외의 공간은 반환한다.
DATE : 날짜 타입
BLOB : 대용량 이진 데이터 (4GB)
CLOB : 대용량 문자 데이터 (4GB)
사용자가 원하는 조건의 데이터만을 유지하기 위해 특정 컬럼에 설정하는 제약
데이터 무결성 보장을 목적으로 함. 테이블 생성 시 컬럼 레벨 또는 테이블 레벨에서 작성 가능하다.
해당 컬럼에 반드시 값이 지정되어야 하는 겨우 사용
컬럼 레벨에서만 작성 가능하다
CREATE TABLE 테이블명 (
USER_NO NUMBER NOT NULL,
USER_ID VARCHAR2(20),
USER_PWD VARCHAR2(30),
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
컬럼 입력값의 중복을 제한하는 제약 조건
제약조건 지정 방법
1) 컬럼 레벨 : [CONSTRAINT 제약조건명] 제약조건
2) 테이블 레벨 : [CONSTRAINT 제약조건명] 제약조건 (컬럼명
CREATE TABLE USER_USED_UK(
USER_NO NUMBER,
--USER_ID VARCHAR2(20) UNIQUE, -- 컬럼레벨
USER_ID VARCHAR2(20),
USER_PWD VARCHAR2(30),
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
/*테이블 레벨*/
CONSTRAINT USER_ID_U UNIQUE(USER_ID)
);
3. PRIMARY KEY
테이블에서 한 행의 정보를 찾기 위해서 사용할 컬럼
테이블에 대한 식별자 역할을 함
NOT NULL + UNIQUE의 특징을 지닌다
CREATE TABLE USER_USED_PK(
USER_NO NUMBER CONSTRAINT USER_NO_PK PRIMARY KEY, -- 컬럼 레벨
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
-- 테이블 레벨
-- CONSTRAINT USER_NO_PK PRIMARY KEY(USER_NO)
);
4. FOREIGN KEY
참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있다
FOREIGN KEY 제약조건에 의해서 테이블간에 관계가 형성됨
제공되는 값 외에는 NULL을 사용할 수 있음
CREATE TABLE USER_GRADE(
GRADE_CODE NUMBER PRIMARY KEY,
GRADE_NAME VARCHAR2(30) NOT NULL
);
CREATE TABLE USER_USED_FK(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
GRADE_CODE NUMBER CONSTRAINT GRADE_CODE_FK REFERENCES USER_GRADE/*(GRADE_CODE)*/
-- 컬럼명 미작성시 USER_GRADE 테이블의 PRIMARY KEY를 자동 참조
-- CONSTRAINT G_C_K FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE
);
FOREIGN KEY는 삭제룰을 지정할 수 있다. 만일 지정하지 않으면 ON DELETE RESTRICT (삭제 제한으로 기본 지정된다.)
**삭제룰 1) ON DELETE RESTRICT**
FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값이 있을 경우 제공하는 컬럼의 값은 삭제하지 못한다. 즉 자식 레코드가 연결되어 있으면 삭제 자체가 불가능하게 되는 제약 조건이다.
**삭제룰 2) ON DELETE SET NULL**
이는 자식 레코드가 연결된 컬럼 값을 삭제 했을 때, 연결된 자식키의 값이 NULL값이 되는 옵션이다.
**삭제룰 3) ON DELETE CASCADE **
이는 부모키가 삭제되었을 때, 연결된 자식키의 행이 아예 삭제되는 옵션이다.
5. CHECK
컬럼에 기록되는 값에 조건을 설정할 수 있음
CHECK (컬럼명 비교연산자 비교값)
-- 주의 : 비교값은 리터럴만 사용할 수 있음, 변하는 값 or 함수 사용 불가
CREATE TABLE USER_USED_CHECK(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10) CONSTRAINT GENDER_CHECK CHECK( GENDER IN ('남','여')),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);