5_oracle_DDL(CREATE)

study/Oracle · 2019. 11. 21. 08:55

DDL(CREATE)

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

객체(Object)를 만들고(CREATE), 수정하고(ALTER), 삭제(DROP) 하는 등의 데이터의 전체적인 구조를

정의하는 언어로 주로 DB관리자, 설계자가 사용하는 언어

*오라클에서 객체(Object) 종류

테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE),

인덱스(INDEX), 패키지(PACKAGE), 트리거(TRIGGER),

프로시져(PROCEDURE), 함수(FUNCTION),

동의어(SYNONYM), 사용자(USER)

 

<CREATE>

- 테이블이나 인덱스, 뷰 등 다양한 DB객체를 생성하는 구문

1. 테이블 만들기

- ★테이블이란?

행(ROW)과 열(COLUMN) 으로 구성되는 가장 기본적인 데이터베이스 객체

데이터베이스 내에서 모든 데이터는 테이블을 통해 저장됨

[표현식]
CREATE TABLE 테이블명(
컬럼명 자료형(크기) [제약조건][기본값],
컬럼명 자료형(크기) [제약조건][기본값],
.....
[제약조건]
);

데이터 딕셔너리

- 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블

- 데이터 딕셔너리는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을

진행할 때 데이터베이스 서버에 자동으로 갱신되는 테이블

 

USER_TABLE

- 사용자가 작성한 테이블을 확인할수 있는 딕셔너리 뷰

USER_TAB_COLUMNS

- 사용자가 작성한 테이블의 컬럼과 관련된 정보확인용 뷰

-EX) SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MEMBER';

USER_CONSTRAINTS

- 사용자가 작성한 제약조건을 확인하는 뷰

USER_CONS_COLUMNS

- 제약조건이 걸려있는 컬럼 확인 뷰

-------------------------------------------------------------------

 

DESC MEMBER

- DESC(DESCRIBE, 묘사) : 테이블 구조를 간단히 표시

@ 값넣기

INSERT INTO 테이블명 VALUES(값,값,값.........);

INSERT INTO 테이블명(컬럼명,컬럼명..)VALUE(값,값..);

@제약조건(CONSTRAINTS)

- 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약

- 테이블 작성 시 컬럼에 대해 값 기록에 대한 제약조건 설정 가능

- 데이터의 무결성을 보장하기 위해서 사용

- 입력 데이터에 문제가 없는지 자동으로 검사할 목적으로 사용

- 데이터의 수정/삭제 가능 여부 검사 목적으로 사용

 

@ 테이블 생성 시 제약조건 설정방법

1) 컬럼 레벨 방식 : 컬럼 기입 시 컬럼 뒤쪽에 제약조건 추가

2) 테이블 레벨 방식 : 테이블 생성구문 마지막에 별도로 제약조건 추가

@ 테이블 레벨 제약조건 설정 구문

- [CONSTRAINT 제약조건명] 제약조건(컬럼명)

@ 복합키

- 두개 이상의 컬럼을 묶어서 제약조건 설정

- UNIQUE, PRIMARY KEY 가능

- ★ 반드시 테이블 레벨로만 설정

- 묶음으로 같은 값을 확인하기 때문에 둘중 하나라도 값이 다르면 다른걸로 인식하여 값이들어감

@ 제약조건의 종류

PRIMARY KEY, UNIQUE, NOT NULL, CHECK, FOREIGN KEY

@ NUT NULL

- 해당 컬럼에 반드시 값이 기록되어야 하는 경우에 사용

- 데이터 삽입, 수정 시 NULL값을 허용하지 않도록 ★★컬럼레벨★★에서 제한

@ ★UNIQUE

- 컬럼 입력 값에 대해서 중복을 제한하는 제약조건

- 기존에 컬럼에 존재하는 값과 데이터 중 중복이 있으면 안됨

- 컬럼레벨, 테이블레벨 모두 설정 가능

@ CHECK

- 컬럼에 기록되는 값을 제한할 수 있는 제약 조건

- CHECK(컬럼명 비교연산자 비교값)

- 비교값으로는 리터럴만 사용가능 (변할수 있는 값이나, 함수는 사용불가능!!)

- 컬럼레벨, 테이블레벨 모두 설정 가능

@ PRIMARY KEY (기본키)

- 테이블에서 한 행의 정보를 식별할 수 있게 하기 위하여

- 사용할 컬럼에 추가하는 제약조건

 -> 각 행들을 구별할 수 있는 식별자 역할을 지정할 경우 사용

- EX) 회원번호, 부서코드, 직급코드, 수강생번호, 주민등록번호

- PRIMARY KEY는 NOT NULL 제약조건 + UNIQUE 제약조건

- 한 테이블당 한개만 설정 가능

- 컬럼, 테이블 레벨 모두 설정가능

- 복합키 설정시 테이블 레벨만 가능

@ ★★★ FOREIGN KEY(외래키)

- 해당 컬럼에 참조된 다른 테이블이 제공하는 값만 사용 할 수 있도록 하느 ㄴ제약조건

- 관계형 데이터베이스(RDBMS)는 테이블 마다 관계가 맺어져 있는데 이 관계를 맺기 위해

  사용하는 제약조건이 FOREIGN KEY -> 테이블간의 연결고리 역할

- 이 때, 부모 테이블(참조 당하는 테이블)의 PRIMARY KEY는 자식 테이블(참조를 하는 컬럼을 보유한테이블)의

  FOREIGN KEY로 지정을 하게됨

- REFERENCES 참조할테이블명(참조할 컬럼명)

- 컬럼레벨, 테이블레벨 둘다 가능

-EX) FOREIGN KEY(GRADE_CODE) REFERENCE MEN_GRADE[(GRADE_CODE)]

참조 무결성

- 참조하는 테이블의 컬럼 값에 없는 데이터를 삽입할 수 없게 하는 것

- FOREIGN KEY는 연결고리 역할을 하기 때문에 테이블을 연결하여 조회하는 JOIN 구문에 사용할

 컬럼으로 적합

@FOREIGN KEY 삭제 옵션

- 부모 테이블 데이터 삭제 시 자식 테이블의 기록된 데이터를 삭제 또는 NULL로 변환하는 옵션

1) ON DELETE SET NULL

 부모 테이블 데이터 삭제시 자식 데이터 NULL로 변경

2) ON DELETE CASCADE

 부모 테이블 데이터 삭제 시 해당 데이터를 참조하고 있던 자식 테이블의 행을 삭제시키는 옵션

@@ SUBQUERY를 이용한 테이블 생성

- 테이블 복사, 특정 조회 형태를 저장한 테이블 생성

- 컬럼명, 데이터 타입, 컬럼 값이 모두 복사되고 제약조건은 NOT NULL만 복사가 됨

@테이블 복사

EX) CREATE TABLE EMPLOYEE_COPY AS SELECT * FROM EMPLOYEE;

* 여기에서 서브쿼리는 ()를 사용하지 않음

@데이터의 컬럼, 데이터 타입만 복사하기

EX) CREATE TABLE EMPLOYEE_COPY3

AS SELECT * FROM EMPLOYEE WHERE 1=0;

 

'study > Oracle' 카테고리의 다른 글

7_oracle_DDL (ALTER, DROP)  (0) 2019.11.23
6_oracle_DML, DCL, TCL  (0) 2019.11.22
5_oracle_서브쿼리  (0) 2019.11.20
4_oracle_JOIN  (0) 2019.11.19
3_oracle_함수2  (0) 2019.11.16