데이터베이스 개체

仁惠·2021년 2월 15일
0

DATABASE

목록 보기
4/11

인덱스(Index)

인덱스란 대부분의 책의 제일 뒤에 붙어 있는 '찾아보기' 와 같은 개념이다.
인덱스는 테이블의 열 단위에 생성된다. (열을 기본 키로 설정하면 자동으로 인덱스가 생성됨)

인덱스 X

'mary'를 처음부터 끝까지 다 찾아봤음.

인덱스 O

인덱스 만들기

CREATE INDEX idx_indexTBL_firstname ON indexTBL(first_name);

실행

SELECT * FROM indexTBL WHERE first_name = 'Mary';

을 다시 드래그 해서 번개모양 눌러준다.
결과값은 바뀌지 않는다.

뷰(View)

가상의 테이블(테이블처럼 보이지만 테이블은 아니다.) 테이블에 링크된 개념

EXAMPLE
아르바이트생에게 테이블 전체 내용을 공개할 순 없을 때, 테이블의 몇 가지 정보만 뽑아서 뷰를 생성한다. 뷰는 실제로 있는 것이 아니라, 회원 테이블의 링크 개념이므로 실제 데이터는 회원 테이블에만 존재하기 때문에 데이터의 중복이 발생되지 않는다. 또한, 아르바이트생은 뷰에만 접근 권한을 줘서 회원들의 중요한 정보는 아예 볼 수 없다. 만약 아르바이트생을 위한 테이블을 또 만들게 된다면 동일한 데이터가 두 테이블에 존재하게 되어 데이터의 중복이 발생한다.

뷰 만들기

CREATE VIEW uv_memberTBL
AS
	SELECT memberName, memberAddress FROM memberTBL;

뷰 확인하기

SELECT * FROM uv_memberTBL;

스토어드 프로시저(Stored Procedure)

MySQL에서 제공해주는 프로그래밍 기능
즉, SQL문을 하나로 묶어서 편리하게 사용하는 기능.
실무에서는 SQL문(주로 SELECT)을 매번 하나하나 수행하기 보다는 스토어드 프로시저로 만들어 놓은 후에 스토어드 프로시저를 호출하는 방식을 많이 사용한다.

가정

SELECT * FROM memberTBL WHERE memberName = '당탕이';
SELECT * FROM productTBL WHERE productNAME = '냉장고';

위 두 select문을 매우 자주 사용한다고 가정하자,

만들기

DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
	SELECT * FROM memberTBL WHERE memberName = '당탕이';
	SELECT * FROM productTBL WHERE productNAME = '냉장고';
END //
DELIMITER ;

DELIMITER
DELIMITER는 직역하면 '구문 문자'로 'C'나 'JAVA'의 ';'(세미콜론)이라고 생각하면 된다.
즉, 문법의 끝을 나타내는 역할을 한다.
BEGIN과 END사이에 세미콜론을 사용했기 때문에 DELIMITER를 설정하지 않으면 문장을 구분하기가 어려워진다. 또한 구문 문자를 또 세미콜론으로 지정하는 것도 문장을 구분하기 어렵게 하므로 세미콜론이 아닌 //로 설정한 것이다. 마지막에 DELIMITER 명령어를 다시 사용한 이유는 다시 세미콜론을 이용하여 문장을 구분하기 위해서다.

실행

CALL myProc();

트리거(Trigger)

다른 테이블에 부착되어서 테이블에 INSERT나 UPDATE 또는 DELETE 작업이 발생되면 실행되는 코드

EXAMPLE
'당탕이'라는 학생이 자퇴를 하려고 한다. 학생 테이블에서 삭제를 하면 '당탕이'의 정보가 삭제되긴 하지만 '당탕이'가 자퇴생인지 아닌지도 모르게 된다. 따라서 '당탕이'를 학생테이블에서는 삭제하고 자퇴생테이블에 자동으로 추가시키는 것

자동으로 추가시킬 테이블 만들기

CREATE TABLE deleteMemberTBL (
    memberID char(8),
    memberName char(5),
    memberAddress char(20),
    deleteDate date -- 삭제한 날짜
);

트리거 생성

DELIMITER //
CREATE TRIGGER trg_deleteMemberTBL -- 트리거 이름
    AFTER DELETE -- 삭제 후에 작동하게 지정
    ON memberTBL -- 트리거를 부착할 테이블
    FOR EACH ROW -- 각 행마다 적용시킴
BEGIN
	-- OLD 테이블의 내용을 백업테이블에 삽입
    INSERT INTO deleteMemberTBL
		VALUES (OLD.memberID, OLD.memberName, OLD.memberAddress, CURDATE() );
END //
DELIMITER ;

확인

DELETE FROM memberTBL WHERE memberName = '당탕이' ;
SELECT * FROM memberTBL;

SELECT * FROM deleteMemberTBL;

profile
ᕕ( ᐛ )ᕗ

0개의 댓글