Database/MySQL

[MySQL] 실전용 SQL 미리 맛보기

hyeeein 2023. 12. 8. 01:10

1. 프로젝트 진행 단계 (폭포수 모델의 관점에서)

: 프로젝트 계획 → 업무 분석 → 시스템 설계 → 프로그램 구현 → 테스트 → 유지보수

 

2. 데이터베이스 모델링 (Database Modeling) 

우리가 살고 있는 세상에서 사용되는 사물이나 작업을 DBMS의 데이터베이스 개체로 옮기기 위한 과정

데이터베이스 모델링에는 정답이 따로 없음. 다만, 효율적으로 모델링 할 필요가 있다는 점에서 실무 경험이 필요.

 

 

데이터 모델링은 2가지 단계로 이루어진다

 

① 개념적 데이터 모델링 (conceptual modeling)

현실 세계의 중요 데이터를 추출하여 개념 세계로 옮기는 작업

예) 개체-관계 모델 (ER 다이어그램, Entity-Relationship Diagram)

 

② 논리적 데이터 모델링 (logical modeling)

개념 세계의 데이터를 데이터베이스에 저장하는 구조로 표현하는 작업으로, 데이터베이스 스키마 (schema)와 같음

사용자가 생각하는 데이터베이스의 모습 또는 구조이므로 어떻게 저장할지가 굉장히 중요함.

예) 관계 데이터 모델, 계층 데이터 모델, 네트워크 데이터 모델 등 …

 

 

3. 전체 데이터베이스 구성도

데이터 data 단편적인 정보
테이블 table 데이터를 입력하기 위한 표 형태
데이터베이스 Database (DB) 데이터 저장소 (= 스키마라고도 부름)
데이터베이스 관리 시스템 Database management
System (DBMS)
데이터베이스를 관리하는 시스템 또는 소프트웨어 (MySQL)
열 (컬럼, 필드) column, field 테이블의 세로, 테이블은 여러 개의 열로 구성됨
열 이름 column name, field name 각 열을 구분하기 위한 이름 (무조건 다 달라야 함 ★)
데이터 형식 date type 열에 저장될 데이터의 형식 (숫자/문자/날짜 등)
행 (로우, 레코드) row, record 테이블의 가로, 실질적인 진짜 데이터 수
기본 키 Primary Key (PK) 각 행을 구분하는 유일한 열
중복되어서도 안되고, 비어서도 안됨
구조화된 질의어 SQL 사람과 DBMS가 소통하기 위한 언어

 

4. 데이터베이스 구축

: 데이터베이스 만들기 → 테이블 만들기 → 데이터 입력/수정/삭제하기 → 데이터 조회/활용하기

 

- 스키마 : MySQL 안에 있는 데이터베이스

- 데이터 형식: 문자형(CHAR), 정수형(INT), 날짜형(DATE), 비어 있는 값을 허용하지 않음(NOT NULL)

- 예약어: SELECT, FROM, WHERE, ...

- 기본키: 열에 지정하며, 각 행을 구분하는 유일한 값

 

5. 데이터베이스 개체

인덱스는 데이터를 조회할 때 결과가 나오는 속도를 획기적으로 빠르게 해주고, 뷰는 테이블의 일부를 제한적으로 표현할 때 주로 사용함. 스토어드 프로시저는 SQL에서 프로그래밍이 가능하도록 해주고, 트리거는 잘못된 데이터가 들어가는 것을 미연에 방지할 수 있는 기능이라고 볼 수 있음.

 

1) 인덱스

- SQL 마지막에 ON member(member_name)의 의미는 member 테이블의 member_name 열에 인덱스를 지정

- 인덱스 생성 여부에 따라 결과가 달라지는 것은 아니지만, 데이터가 많아지만 효과 굿

 

2) 뷰

- 가상의 테이블, 실제 데이터를 가지고 있지 않으면서 진짜 테이블에 링크(link)된 개념

- 뷰의 실체는 바로 SELECT 문 !! (아뭐야)

- 뷰를 왜 사용하는가? 보안에 도움되고, 긴 SQL 문을 간략하게 만들 수 있음

 

3) 스토어드 프로시저

- MySQL에서 제공하는 프로그래밍 기능. 여러 개의  SQL문을 묶어서 편리하게 사용 가능

 

- 첫 행과 마지막 행에 구분 문자라는 의미의 DELIMITER // ~ DELIMITER ; 문이 나옴

 (스토어드 프로시저 묶어주는 약속, 마지막 DELIMITER ;에서 둘 사이에 띄어쓰기 주의하기 !!)

- 그리고 BEGINEND 사이에 SQL문을 넣으면 완성

-- 예시
DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
	SELECT * FROM MEMBER WHERE MEMBER_NAME = '나훈아';
	SELECT * FROM PRODUCT WHERE PRODUCT_NAME = '삼각김밥';
END //
DELEIMITER ;

- 스토어드 프로시저를 호출하기 위해서는 CALL 문을 사용

- 스토어드 프로시저를 삭제하려면 DROP PROCEDURE myProc을 사용