정보처리기사/Database

정처기 수준에서의 데이터베이스 - SQL(DDL, DCL)

mostlyjinsonit 2018. 10. 4. 20:26
반응형

SQL(structured query language)

- 인터페이스 = 대화식 SQL, 내장형 SQL

- 구성요소 = DDL(정의어), DML(조작어), DCL(제어어)

 

DDL(Data Definition Language)

- 데이터베이스의 논리적 데이터 구조와 물리적 데이터 구조 및 구조 간의 사상을 정의한다.

- DDL로 정의된 내용은 메타데이터(Metadata)가 되며, 시스템 카탈로그에 저장된다.

 

DDL = CREATE/ALTER/DROP

 

CREATE DOMAIN = 도메인을 정의하는 명령문이다.

표기형식 => CREATE DOMAIN 도메인_이름 데이터_타입 

           [DEFAULT 기본값]

                   [CONSTRAINT VALID-도메인_이름 CHECK(범위값)

EX) CREATE DOMAIN GENDER CHAR(2)

       DEFAULT '여'

       CONSTRAINT VALID-GENDER CHECK (VALUE IN (남', '여'));

 

CREATE TABLE 학생{

학번 CHAR(15) NOT NULL, 

이름 VARCHAR(15) NOT NULL, 

*NOT NULL = 널값을 입력하면 안된다. / is not null = 검색 명령인 Select에서 where 속 is not null, 속성이 널값이 아닌 것을 검색해라. 

학과 VARCHAR(20) NOT NULL,

학년 INT NOT NULL

전화번호 CAHR(15) NOT NULL,

성별 GENDER,

생년월일 DATE,

PRIMARY KEY(학번), *기본키로 지정되어있으면 NOT NULL과  UNIQUE가 자동지정

UNIQUE(전화번호), *UNIQUE = 중복 제거

FOREIGN KEY(학과) REFERENCES 학과(학과코드)

ON DELETE CASCADE ON UPDATE CASCADE, *부모 테이블에서 삭제,수정이 일어나는 경우, 자식 테이블도 삭제,수정해라. 

CONSTRAINT 학년제약 CHECK(학년 >= 1 AND 학년 <= 4));  *CHECK = 제약을 거는 조건으로

 

CREATE VIEW = 뷰를 정의하는 명령문이다.

표기형식 => CREATE VIEW 뷰_이름(속성_이름,...)

    AS SELECT 속성-이름,... FROM 테이블_이름 WHERE 조건

   [WITH CHECK OPTION];

 

EX) CREATE VIEW 컴공학생(학번,이름,학과)

AS SELECT 학번, 이름, 학과

FROM 학생

WHERE 학과='컴퓨터공'

[WITH CHECK OPTION]; 

 

CREATE INDEX = 인덱스를 정의하는 명령문이다.

표기 형식 => CREATE [UNIQUE] INDEX 인덱스_이름

     ON 기본테이블_이름((속성_이름[ASC|DESC],..));

 

EX) CREATE UNIQUE INDEX 학번_idx

       ON 학생(학번 ASC);

 

ALTER TABLE = 테이블의 정의를 변경하는 명령문

표기형식 = ALTER TABLE 기본테이블_이름 ADD 속성_이름 data_type[DEFAULT '기본값'];

 

데이터 제어어 [DCL, data control language]

COMMIT = 정상적인 완료

ROLLBACK = 비정상적인 종료

GRANT = 사용권한 부여

REVOKE = 사용권한 취소

 

EX) DBA: GRANT SELECT, DELETE ON STUDENT

TO U1 WITH GRANT OPTION;    *with grant option을 주면  그 사용자에게 grant 권한을 줄 수 있는 권한을 줌

       U1: GRANT SELECT, DELETE ON STUDENT TO U2;

 

REVOKE = 사용자에게 해당 객체에 대한 특정 사용권한을 취소할 떄 사용.

권한 종류: SELECT, INSERT, DELETE, UPDATE 등

 

AUTO COMMIT이 off된 경우, COMMIT 하기 전에 실제 데이터베이스 내에서는 수행한 명령어가 적용이 안된다.

COMMIT을 하기전에 ROLLBACK을 하면 그 수행된 명령어를 취소 할 수 있다. COMMIT을 하게 되면 ROLLBACK이 안된다.

반응형