본문 바로가기
정보처리기사 실기/데이터베이스

[정보처리기사 실기] 데이터베이스 3일 차

by 포리즈FOREZ 2019. 6. 11.

안녕하세요. 하루인생입니다.

 

어제 쓰다가 양이 너무 많아 오늘 이어서 쓰게 되었습니다.

 

바로 시작해볼까요? ㅎㅎ

 

데이터베이스 3일 차

오늘은 DDL을 공부해볼 건데요.

DDL은 암기하기에 복잡하고 난이도가 있다 보니 기출에서는 빈칸을 채우는 문제로

자주 출제되는데요. 그래도 혹시나 모르니 꼼꼼히 공부하시길 바랍니다! 

 

[2019정보처리기사 실기] 데이터베이스

SQL 정의어에 대해 알아보도록 하겠습니다.

SQL 언어는 DDL, DML, DCL 이렇게 세 가지로 나뉘는데요.

중간에 D, M, L의 차이가 보이시죠?

DDL의 D는 Define(정의)이고 DML의 M은 Manipulation(조작)이고 DCL의 C는 Control(제어)의 약자입니다.

그럼 이제 DDL에는 어떤 명령어가 있는지 알아보도록 하겠습니다.

 

DDL은 ① CREATE ② ALTER ③ DROP 이렇게 세 가지가 있는데 저는 CAD(캐드)로 암기하였습니다.

물론 DML에도 D(Delete)가 있어 헷갈릴 수 있지만 DDL은 정의하는 것이므로 더 심오한(?) 느낌을 가지고 있는 D(DROP)이라고 생각하시면 될 것 같습니다.

 

자 CREATE의 사용 방법을 알아볼까요?

① CREATE : 테이블, 스키마, 도메인, 인덱스, 뷰 등을 정의하기 위해 사용하는 명령어입니다.

 

(1) 테이블 정의

// {} : 여러 개인 경우 반복
// [] : 생략 가능
// | : 선택
    
CREATE TABLE 테이블이름( 
	{속성이름 데이터타입 [NOT NULL] [DEFAULT 값,}
    [PRIMARY KEY (속성이름),]
    [UNIQUE(속성이름),]
	[FOREIGN KEY(속성이름) REFERENCES 참조테이블(속성이름)]    
    [ON DELETE CASCADE | SET NULL |SET DEFAULT | NOT ACTION]
    [ON UPDATE CASCADE | SET NULL |SET DEFAULT | NOT ACTION,]
    [CONSTRAINT 제약조건이름 CHECK(속성이름=범위값)]
    }
);

 

 

조건 ①

  1. ON DELETE : 참조 테이블의 튜플이 삭제되면
  2. ON UPDATE : 참조 테이블의 튜플이 변경되면

조건 ②

  1. CASECADE : 기본 테이블도 같이 변화
  2. SET NULL : 기본 테이블의 관련된 속성을 NULL로!
  3. SET DEFAULT : 기본 테이블의 관련된 속성을 기본값으로!
  4. NOT ACTION : 기본 테이블은 아무론 변화 X

VARCHAR(문자수) : 가변 길이 문자를 저장하는 데이터 타입

 

쉬운 이해를 위해 예를 들어 코드로 올려드릴게요.

CRETE TABLE 학생
(
	학번 INT,
	성명 CHAR(5) NOT NULL,
	학과 CHAR(10),
	학년 INT,
	학점 CHAR(1),
 	PRIMARY KEY(학번),	// 기본키는 '학번' 속성
    FOREIGN KEY(학과) REFERENCES 수강(학과)	//외래키는 학과, 수강테이블의 학과를 참조함
    	ON DELETE SET NULL  // 삭제시 NULL로
        ON UPDATE CASCADE,	// 변경시 참조테이블도 같이 변함
	CONSTRAINT HAC CHECK(학년 <= 4)	// HAC라는 제약조건 이름으로
    								 // 학년의 속성값은 4이하의 값을 갖도록 한다. 
);

 

 

[2019정보처리기사 실기] 데이터베이스

 

(2) 스키마 정의 : 일반 사용자에게 스키마에 대한 권한을 주기 위해 사용

CREATE SCHEMA JUNGBO AUTHORIZATION 이영진;
// 사용자 이영진에게 스키마를 정의하고 사용할 수 있도록 
// 'JUNGBO'라는 이름으로 스키마를 만듦

 

(2) 도메인 정의 : 속성의 범위를 지정하기 위해 사용

CREATE DOMAIN 도메인이름 데이터타입
DEFAULT 기본값
CONSTRAINT 제약조건이름 CHECK(VALUE IN(범위값));

 

예를 들어보면

CREATE DOMAIN success char(1)	// 한 글자의 자료형을 가진 success 도메인
DEFAULT 'T'	// 기본 값은 T
CONSTRAINT v-success CHECK(VALUE IN('T','F'));	// 제약조건 이름은 v-success이고 범위는 T 또는 F

 

(3) 인덱스 정의 : 효율적인 검색을 위해 사용

CREATE [UNIQUE] INDEX 인덱스이름	
ON 테이블이름 (속성이름 [ASC | DESC])	// 저장된 테이블의 속성으로 인덱스를 만듦
[CLUSTER];	// 인접된 튜플들을 물리적인 그룹으로 묶어 저장

UNIQUEE : 중복을 허용하지 않도록 인덱스 생성

ASC : 오름차순

DESC : 내림차순

 

지금까지 CREATE를 알아봤고요.

두 번째 정의어인 ALTER을 알아보도록 하겠습니다.

 

② ALTER : 기존의 테이블에 속성을 추가, 삭제, 변경 시 사용

ALTER TABLE 테이블이름 ADD 속성이름 데이터타입;	// 속성을 추가
ALTER TABLE 테이블이름 ALTER 속성이름 [SET DEFAULT];	// 속성에 대한 사항을 변경할 때
ALTER TABLE 테이블이름 DROP 속성이름 [CASCADE | RESTRICT];	// 속성을 추가

 

③ DROP : 기존의 테이블, 스키마, 도메인, 뷰, 제약조건 등을 제거할 때 사용

DROP TABLE 테이블이름 [CASCADE | RESTRICT];
DROP SCHEMA 스키마이름 [CASCADE | RESTRICT];
DROP DOMAIN 도메인이름 [CASCADE | RESTRICT];
DROP VIEW 뷰이름 [CASCADE | RESTRICT];
DROP INDEX 인덱스이름;
DROP CONSTRAINT 제약조건이름;

// RESTRICT : 삭제할 요소가 참조 중이면 삭제가 이루어지지 않음

 

인덱스와 제약조건은 참조하는 관계가 아니므로 [CASCADE | RESTRICT]를 해 줄 필요가 없습니다.