ORACLE DB

▶DDL◀

chojdsj 2023. 5. 28. 19:15
728x90
데이터 딕셔너리란?

 

- 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블. 데이터 딕셔너리는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때 데이터 베이스 서버에 의해 자동을 갱신되는 테이블 

 

* User tables : 자신의 계정이 소유한 객체 등에 관한 정보를 조회 할 수 있는 딕셔너리 뷰

 

 

 

DDL (DATA DEFINITION LANGUAGE)

 

- DDL(DATA DEFINITION LANGUAGE) : 데이터 정의 언어

 

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

 

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

 

 

 

 

 

CREATE

 

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

 

- 테이블로 생성된 객체는 DROP 구문을 통해 제거 할 수 있음 

 

** 테이블이란? **

행(ROW)과 열(COLUMN)으로 구성되는 가장 기본적인 데이터베이스 객체이다. 데이터 베이스 내에서 모든 데이터는 테이블을 통해서 저장된다.

 

 

- 작성법 : CREATE TABLE 테이블명 (

                    컬럼명 자료형(크기),

                    컬럼명 자료형(크기),

                    ...);

 

* DEFAULT : 입력되는 값이 없거나 'DEFAULT' 키워드 사용 시에 기록되어질 값을 지정

 

 

 

***** 자료형 ******

 

 

NUMBER : 숫자형(정수,실수)

 

CHAR(크기) : 고정길이 문자형(200BYTE)

                       EX) CHAR(10) 컬럼에 'ABC' 3BYTE 문자열만 저장해도 10BYTE 저장공간을 모두 사용

 

 

VARCHAR2(크기) : 가변길이 문자형 (4000BYTE), 영어는 한 글자당 1BYTE, 한글은 한 글자당 3BYTE

                                EX) VARCHAR2(10) 컬럼에 'ABC' 3BYTE 문자열만 저장하면 나머지 7BYTE 반환

 

DATE : 날짜 타입

 

BLOB : 대용량 이진 데이터(4GB)

 

CLOB : 대용량 문자 데이터(4GB)

 

 

 

 

 

COMMENT ON COLUMN

 

- 컬럼에 주석을 달아주는 기능 

 

- 작성법 : COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';

 

 

 

**** NUBER 타입 컬럼에 데이터 삽입 시 앞에 0이 붙어있으면 사라지는 문제점 주의 ****

 

 

 

 

 

제약조건 (CONSTRAINTS)

 

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

 

- 데이터 무결성 보장을 목적으로 한다.

 

* 데이터 무결성이란? 

중복 데이터 최소화, NULL 최소화 지향 

 

 

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

 

- 제약조건 종류 : PRIMARY KEY,  NOT NULL,  UNIQUE,  CHECK,  FOREIGN KEY

 

 

- USER_CONSTRAINTS : 사용자가 작성한 제약조건을 확인하는 딕셔너리 뷰

- USER_CONS_COLUMNS : 제약조건이 걸려있는 컬럼을 확인하는 딕셔너리 뷰

 

 

NOT NULL

 

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

 

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

 

 

 

 

 

UNIQUE

 

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

 

- 컬럼 레벨에서 설정가능, 테이블 레벨에서 설정가능

 

- 단, UNIQUE 제약조건이 설정된 컬럼에 NULL값은 중복 삽입 가능 

 

 

 

 

 

 

UNIQUE 복합키

 

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

 

- 모든 컬럼의 값이 같아야 중복으로 취급함

 

- 복합키는 테이블 레벨로만 지정 가능 

 

--> 첫번째와 두번째 삽입에서는 이름은 중복되지만 아이디는 중복되지 않기 때문에 삽입이 가능한 반면, 마지막 삽입에서는 아이디와 이름 모두 중복되기 때문에 삽입이 불가능하다. 

 

 

 

 

PRIMARY KEY

 

- NOT NULL + UNIQUE 제약조건을 의미

 

- 테이블에 대한 식별자(IDENTIFIER) 역할을 함 

 

- 한 테이블당 한개만 설정할 수 있음 

 

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

 

- 한 개 컬럼에 설정할수도 있고, 여러개의 컬럼을 묶어서 설정할 수 있음(복합키 == 테이블 레벨에서만 설정 가능)

 

 

 

** USER_NO 에 PRIMARY KEY 제약조건을 설정했을 경우 **

 

 

 

 

FOREIGN KEY (외부키 / 외래키)

 

- 다른 테이블의 PK 또는 UNIQUE 제약조건이 설정된 컬럼 

 

- 참조(REFERENCES)된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음 

 

- FOREIGN KEY 제약조건에 의해서 테이블간의 관계(RELATIONSHIP)가 형성됨 

 

- 제공되는 값 외에는 NULL을 사용할 수 있음 

 

 

- 작성법

 

* 컬럼레벨일 경우 : 컬럼명 자료형(크기) [ CONSTRAINT 이름] REFERENCES 참조할 테이블명 [ (참조할컬럼) ] [ 삭제룰 ]

 

* 테이블레벨일 경우 : [ CONSTRAINT 이름 ] FOREIGN KEY (적용할 컬럼명) REFERENCES 참조할테이블명 [ (참조할컬럼) ] [삭제룰]

--> 테이블 레벨에서만 FOREIGN KEY 단어가 사용된다. 

 

- 참조될 수 있는 컬럼은 PRIMARY KEY컬럼과, UNIQUE 지정된 컬럼만 외래키로 사용가능

 

- 참조할 테이블의 참조할 컬럼명이 생략이되면, PRIMARY KEY로 설정된 컬럼이 자동 참조할 컬럼이 됨 

 

 

--> 참조할 테이블인 USER_GRADE 테이블을 생성 

 

 

 

 

--> 참조된 USER_GRADE가 제공하는 컬럼값( 10, 20, 30) 만 사용할수 있으므로 외래키 제약조건에 위배되어 오류 발생 

 

 

 

 

 

FOREIGN KEY 삭제 옵션

 

- 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떤식으로 처리할 지에 대한 내용을 설정할 수 있다.

 

 

- ON DELETE RESTRICTED( 삭제제한 ) 로 기본 지정되어 있기때문에 FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제하지 못함 

 

--> GRADE_CODE 테이블에서 10,30은 외래키로 참조하고 있고 20은 참조하고 있지 않다면 10,30은 삭제가 불가능 하지만 20은 FOREIGN KEY로 지정된 컬럼에서 사용되고 있지 않고있는 값이므로 삭제가능하다. 

 

 

 

**** ON DELETE SET NULL ****

 

- 부모키 삭제시 자식키를 NULL로 변경하는 옵션 

 

--> 부모테이블인 USER_GRADE2에서 GRADE_CODE = 10 삭제시, ON DELETE SET NULL 옵션이 설정되어 있기때문에 부모테이블에서는 아예 삭제가 되고 자식 테이블인 USER_USED_FK2에서는 NULL값으로 변하게 된다.

 

 

 

**** ON DELETE CASCADE ****

 

- 부모키 삭제 시 자식키도 함께 삭제됨 

 

- 부모키 삭제시 값을 사용하는 자식 테이블의 컬럼에 해당하는 행이 삭제가 됨 

 

 

 

 

CHECK

 

- 컬럼에 기록되는 값에 조건 설정을 할 수 있음

 

- 작성법 : CHECK (컬럼명 비교연산자 비교값)

 

 

 

- 주의 : 비교값은 리터럴만 사용할 수 있음, 변하는 값이나 함수 사용못함 

 

 

 

 

SUBQUERY를 이용한 테이블 생성

 

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

 

 

 

 

제약조건 추가

 

- 작성법

 

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

ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] UNIQUE(컬럼명)
ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] CHECK(컬럼명 비교연산자 비교값)
ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL

 

ALTER TABLE 테이블명 ADD [ CONSTRAINT 제약조건명 ] 

 

FOREIGN KEY(컬럼명) REFERENCES 참조테이블명(참조컬럼명)

 

 

 

'ORACLE DB' 카테고리의 다른 글

▶DDL(ALTER,DROP)◀  (0) 2023.06.08
▶SUBQUERY◀  (0) 2023.05.28
▶TCL◀  (0) 2023.05.25
▶DML◀  (0) 2023.05.25
▶JOIN◀  (0) 2023.05.25