본문 바로가기
카테고리 없음

MYSQL 데이터베이스 정리

by 문자메일 2022. 8. 13.

데이터베이스 개체 구성 : 테이블, 인덱스, 스토어드 프로시저, 트리거, 함수

 

인덱스

CREATE TABLE employees.indexTBL (first_name varchar(14), last_name varchar(16), hire_date date);

 

INSERT INTO employees.indexTBL 

SELECT first_name, last_name, hire_date

FROM employees.employees

LIMIT 500;

 

SELECT * FROM indexTBL WHERE first_name = 'Mary';

 

CREATE INDEX idx_indexTBL_firstname ON employees.indexTBL(first_name);

 

인덱스 탔다면 Execution Plan에 아래 이미지처럼 index 탔다고 나옴.

 

뷰 : 가상의 테이블

뷰의 실체는 SELECT 문

CREATE VIEW employees.uv_indexTBL
AS
SELECT first_name, last_name FROM employees.indextbl;

위 명령으로 생성된 VIEW를 대상으로 아래 SQL을 날렸울 경우, 원본 Table에도 변화가 적용됨을 알 수 있음

UPDATE employees.uv_indextbl SET first_name = 'GGeorgi' WHERE first_name = 'Georgi';

 

 

스토어드 프로시저 : MySQL에서 제공해주는 프로그래밍 기능을 말함.

DELIMITER //
CREATE PROCEDURE employees.myProc()
BEGIN
 SELECT * FROM employees.indexTBL WHERE first_name= "Parto";

 SELECT * FROM employees.employees WHERE last_name = "Peac";
END //
DELIMITER ;

 

CALL employees.myProc();

 

 

트리거 : 트리거란 테이블에 부착되어서 테이블에 INSERT나 UPDATE 또는 DELETE 작업이 발생되면 실행되는 코드를 말한다.

사용 예시 : 어떤 학생이 자퇴를 하는 경우, 학생 테이블에서 해당 학생 삭제 시 자퇴생 테이블에 해당 값 자동 INSERT 되도록 트리거 생성

 

CREATE TABLE employees.delete_employees (first_name varchar(14), last_name varchar(16), hire_date date, deleteDate date);

 

DELIMITER //

CREATE TRIGGER employees.trg_deleteEmployees -- 트리거 이름

 AFTER DELETE -- 삭제 후에 작동하게 지정

 ON employees.employees -- 트리거를 부착할 테이블

 FOR EACH ROW -- 각 행마다 적용시킴

BEGIN

 -- OLD (예약어임) 테이블이 내용을 백업테이블에 삽입

 INSERT INTO employees.delete_employees 

  VALUES (OLD.first_name , OLD.last_name , OLD.hire_date , CURDATE() );

END //

DELIMITER ;

 

위 트리거 건 후 아래 SQL 실행 시 정상적으로 트리거 작동되어 대상 테이블로 데이터 INSERT 되었음을 확인할 수 있다.

DELETE FROM employees.employees WHERE emp_no = 10004;

 

 

 

백업과 복원 : 백업은 현재의 데이터베이스를 다른 매체에 보관하는 작업을 말하며 복원은 데이터베이스에 문제가 발생했을 때 다른 매체에 백업된 데이터를 이용해서 원상태로 돌려놓는 작업을 말한다.

댓글