본 내용은 책 <이것이 MySQL이다>를 토대로 진행하였습니다.
DBMS 개요
DBMS에 대한 대략적인 내용과 MySQL에 대해서 알아봅니다.
데이터베이스의 정의와 특징
DB(DataBase)
- '데이터의 집합'
- '데이터의 저장공간' 자체
- 여러명의 사용자가 동시에 접근이 가능해야 합니다.
DBMS(DB Management System)
- DB를 관리, 운영하는 역할을 하는 시스템입니다.
DB/DBMS의 특징
- 자료의 무결성 (Integrity)
- 데이터베이스 안의 데이터는 오류가 없어야 합니다
- 제약 조건(Constrain)이라는 특성을 가집니다.
- 데이터의 독립성
- DB 크기를 변경하거나 데이터 파일의 저장소 변경 시 기존의 작성된 응용 프로그램은 영향을 받지 않아야 합니다.
- 보안
- 허가된 사람만 접근할 수 있어야 하며 권한을 모두 다르게 줄 수 있습니다.
- 데이터 중복의 최소화
- 동일한 데이터가 여러개 중복되어 저장되는것을 방지합니다.
- 응용 프로그램 제작 및 수정이 쉬워짐
- 데이터 안정성 향상
- 대부분의 DBMS가 제공하는 백업/복원 기능을 이용하여 원상 복원/복구하는 방법이 명확해졌습니다.
DB/DBMS의 분류
계층형 DBMS
- 처음으로 나온 DBMS 개념이며 Tree형태인 1:N 관계를 가지고 있습니다.
- 주어진 상태에서의 검색은 빠르다는 장점이 있습니다.
- 처음 구축한 이후 그 구조를 변경하기가 상당히 까다롭고, 접근 유연성이 부족하여 임의의 검색이 어렵다는 단점이 있습니다.
망형 DBMS
- 계층형 DBMS의 문제점을 개선하기 위하여 개발되었습니다.
- 1:1 / 1:N / 다:다 관계를 지원하여 효과적이고 빠른 데이터 추출이 가능합니다.
- 복잡한 내부 포인터를 사용하여 프로그래머가 모든 구조를 이해해야만 프로그램이 작성가능한 단점이 있습니다.
관계형 DBMS
- Relational DBMS
- DB를 Table이라는 최소 단위로 구성하고, Table은 행과 열로 구성한 구조입니다.
- 구조를 바꾸는 것이 용이하여 유지보수 측면에서 편리해졌으며, 대용량 데이터의 관리와 데이터 무결성을 보장하는 장점이 있습니다.
- 데이터가 많아질 수록 시스템이 전반적으로 느려진다는 단점이 있습니다. 하지만 하드웨어의 기술 발달로 상쇄되고 있는 추세입니다.
SQL
- 관계형 데이터베이스에서 사용되는 DBMS의 데이터 구축/관리/활용을 위하여 사용되는 언어를 SQL(Structured Query Language)이라고 합니다.
- DBMS 개발 회사와 독립적이며 다른 시스템으로의 이식성이 좋습니다.
- 대화식 언어이며 표준 SQL가 꾸준히 발전 중입니다.
테이블 외의 DB 개체의 활용
Index
- 쿼리에 응답하는 시간을 단축하여 DB의 성능 향상을 기대할 수 있습니다.
- 책 뒤에 붙어있는 '색인'과 비슷한 개념으로 볼 수 있습니다. 즉 색인화 되어있는 인덱스 파일을 검색하여 검색속도를 빠르게 합니다.
- 데이터의 양이 많을수록 효과적으로 작용합니다.
- 보통
SELECT
쿼리의 WHERE
절이나 JOIN
예약어를 사용했을때 사용되며 INSERT
, UPDATE
, DELETE
쿼리에는 해당사항이 없습니다.
View
- 가상의 테이블로써 보안상의 이유로 주로 사용됩니다.
- 실제 행 데이터를 가지고 있지 않으며, 실제 테이블에 링크된 개념으로 볼 수 있습니다.
- 뷰를
SELECT
시에 실제 테이블의 데이터를 조회하는 것과 동일한 결과가 도출됩니다.
CREATE VIEW uv_memberTBL
AS
SELECT memberName, memberAddress FROM userTBL;
SELECT * FROM uv_memberTBL ;
select * from information_schema.tables where table_schema='shopping_db';
select * from information_schema.views where table_schema='shopping_db';
Stored Procedure
- MySQL에서 제공해주는 프로그래밍 기능입니다.
- SQL문을 하나로 묶어 편리하게 사용할 수 있습니다.
- 다른 프로그래밍 언어와 같은 기능을 담당할 수도 있습니다.
SELECT
문을 매번 하나하나 실행하는것이 아니라 스토어드 프로시저로 만들어 놓은 후 호출하면 간단하게 사용할 수 있습니다.
SELECT * FROM userTBL WHERE memberName = '당탕이';
SELECT * FROM productTBL WHERE productName = '냉장고';
DELIMITER
CREATE PROCEDURE myProc()
BEGIN
SELECT * FROM userTBL WHERE memberName = '당탕이' ;
SELECT * FROM productTBL WHERE productName = '냉장고' ;
END
DELIMITER ;
CALL myProc() ;
Trigger
- 테이블에 부착되어 테이블에
INSERT
나 UPDATE
또는 DELETE
작업이 발생되면 실행되는 코드입니다.