- DBMS 및 MySQL 개요
(DBMS 개요, RDBMS와 MySQL 소개, MySQL의 장단점,- MySQL 설치
DBMS 및 MySQL 개요
DBMS 개요
데이터를 효율적이고 공유성을 강하게 도와주는것이 DBMS이다.
DBMS는 Database Management System의 약자로 데이터베이스 관리 시스템을 의미한다.
데이터를 효과적으로 저장, 관리, 검색할 수 있게 하는 소프트웨어이다.
사용자와 데이터베이스 사이에서 인터페이스 역할을 하여 사용자가 데이터베이스를 손쉽게 다룰 수 있게 한다
복잡한 로직을 손쉽게 도와준다.
DBMS의 필요성
중복 제어
데이터베이스에서 동일한 데이터가 반복적으로 저장되는 것을 방지한다.
이를 통해 저장 공간을 효율적으로 사용할 수 있으며, 데이터의 일관성을 유지할 수 있다.
데이터 공유
여러 사용자가 동시에 같은 데이터에 접근하고 사용할 수 있게 한다.
데이터 베이스에 있는 것을 고치게 된다면 다른 사람들이 보는 것도 함께 수정이 된다.
데이터 보안
중요한 데이터에 대한 접근 권한을 관리하여, 비인가 사용자의 접근을 제한한다.
일반적인 파일은 접근권한 관리가 어렵다. 데이터 베이스는 아주 세밀한 보안 체계를 가능하게 도와준다.
데이터 무결성
데이터베이스 내의 데이터가 항상 올바르고, 일관된 상태를 유지하도록 도와준다.
백업 및 복구: 데이터 손실에 대비하여 백업을 생성하고, 필요시 복구를 수행할 수 있다.
일반적인 파일에서도 어렵지는 않지만 DBMS를 사용해서 명령어 몇 줄로 관리할 수 있기 때문에 수월하다
DBMS의 종류
관계형 DBMS(RDBMS)
가장 널리 사용되는 DBMS로, 데이터를 표(Table) 형태로 저장한다.
대표적으로 MySQL, Oracle, PostgreSQL 등이 있다.
엔터티(Entity)들 사이의 관계를 정리하고 설명한다.
객체지향 DBMS(OODBMS)
객체지향 프로그래밍 언어와 호환되는 DBMS이다.
데이터를 객체(object) 형태로 저장하며, 복잡한 데이터 구조를 효율적으로 관리할 수 있다.
자바의 객체지향과 같은 의미가 있으며 자바에서 사용했던 클래스과 같은 스키마(schema)를 정의할 수 있으면 인스턴스 또한 생성할 수 있다.
NoSQL DBMS: Not only SQL의 약자로, 관계형 DBMS의 한계를 극복하기 위해 만들어진 DBMS이다. 대규모 분산 클러스터 환경에서 사용된다.
명령문 없이 사용이 가능하다.
함수형태로 요청을 하기 때문에 굉장히 빠르지만 무결성이 낮다.
수정 삭제가 이루어지지 않는 데이터에서 자주 사용된다
ex) 누적 데이터, 빅데이터, 로그남기기, 많은 데이터가 쌓일때
관계형과 객체지향의 차이점.
+ 속도가 빠르다와 반대되는 것이 무결성이다
DBMS와 SQL
RDBMS와 MySQL 소개
RDBMS(Relational Database Management System) 이해
RDBMS의 주요 구성 요소
데이터베이스(Database)
데이터베이스는 서로 관련된 데이터의 집합이다.
이를 구성하는 여러 개의 테이블, 인덱스, 뷰, 저장 프로시저 등을 포함할 수 있다.
데이터베이스는 이러한 요소들을 통해 데이터를 효율적으로 저장, 검색, 변경, 삭제할 수 있다.
테이블(Table)(-클래스)
테이블은 데이터베이스 내에서 데이터를 저장하는 기본 단위이다.
행(row)과 열(column)로 구성된 2차원의 구조를 가진다.
테이블의 각 행은 개별적인 데이터 항목(엔티티)를, 각 열은 그 항목의 속성을 나타낸다.
컬럼(Column)(-멤버변수)
컬럼은 테이블의 열을 나타낸다.
각 컬럼은 특정 타입의 데이터를 포함하며, 테이블 내에서 유일한 이름을 가집니다.
예를 들어, '사원' 테이블에서 컬럼은 '사원번호', '이름', '직급', '급여' 등이 될 수 있다.
로우(Row) 또는 레코드(Record)(-인스턴스)
로우 또는 레코드는 테이블의 행을 나타내며, 특정 엔티티의 인스턴스를 나타낸다.
예를 들어, '사원' 테이블에서 한 사람의 정보(사원번호, 이름, 직급, 급여 등)는 하나의 로우 또는 레코드로 표현된다.
필드(Field)
필드는 특정 로우와 컬럼이 만나는 지점에 위치한 개별 데이터 값을 나타낸다.
예를 들어, '사원' 테이블에서 특정 사원의 '이름'을 가리키는 데이터 값이 필드가 될 수 있다.
관계(Relationship)
관계는 RDBMS의 핵심 요소로, 서로 다른 테이블 사이의 연결을 나타낸다.
관계는 주로 외래 키(Foreign Key)를 사용하여 표현되며, 이를 통해 데이터의 일관성과 무결성을 유지하고, 데이터베이스 내에서 효율적인 데이터 조작을 가능하게 한다.
+ 테이블과 관계의 차이점
테이블 : 실체 객체, 형체가 있다.(없을수도 있음)
관계 : 객체들 간에서 나온 행동과 동작, 기능을 표현
ex) 게시글을 작성, 댓글 작성, 좋아요 누르기.
MySQL 소개
MySQL의 주요 특징
- 상대적인 특징이다.
성능
MySQL은 빠른 처리 속도를 가지고 있다.
이는 인덱싱 기능, 쿼리 최적화 등의 기능이 존재하기 때문이다.
확장성
대용량 데이터를 처리할 수 있으며, 클러스터링 등의 기능을 통해 데이터베이스 시스템을 확장할 수 있다.
보안
MySQL은 데이터베이스와 테이블, 사용자에 대한 광범위한 보안 및 접근 제어 기능을 제공한다.
다양한 스토리지 엔진
MySQL은 여러 가지 스토리지 엔진을 제공한다. InnoDB, MyISAM 등 다양한 스토리지 엔진을 사용하여 트랜잭션 처리, 외래 키 제약 조건 등의 기능을 사용할 수 있다.
MySQL의 장단점
MySQL의 장점
성능 : MySQL은 빠른 처리 속도를 가지고 있다. 이는 인덱싱 기능, 쿼리 최적화 등을 통해 가능하다.
오픈소스 : MySQL은 오픈소스 RDBMS로, 소스 코드를 사용자가 자유롭게 사용하고 수정할 수 있다.
수정하여 상용하면 문제가 생길 수 있다.
확장성 : MySQL은 대용량 데이터를 처리할 수 있으며, 클러스터링 등을 통해 데이터베이스 시스템을 확장할 수 있다.
플랫폼 독립성 : MySQL은 다양한 운영 체제에서 동작한다. Windows, Linux, Mac 등에서 모두 사용할 수 있다.
다양한 스토리지 엔진 지원 : MySQL은 InnoDB, MyISAM 등 다양한 스토리지 엔진을 지원하며, 사용자의 요구에 따라 선택적으로 사용할 수 있다.
보안 : MySQL은 사용자 및 데이터베이스 수준의 광범위한 보안 및 접근 제어 기능을 제공한다.
MySQL의 단점
풀 텍스트 검색의 한계
MySQL은 풀 텍스트 검색을 지원하지만, 이 기능은 그다지 효율적이지 않다.
대용량의 데이터에서 빠른 텍스트 검색이 필요한 경우, Elasticsearch나 Apache Solr 등의 검색 엔진과 함께 사용하는 것이 더 효과적일 수 있다.
트랜잭션 처리의 한계
MySQL은 트랜잭션을 지원하지만, 모든 스토리지 엔진이 트랜잭션을 지원하는 것은 아니다.
예를 들어, MyISAM 스토리지 엔진은 트랜잭션을 지원하지 않는다.
복잡한 스토어드 프로시저
MySQL에서 스토어드 프로시저를 작성하거나 디버깅하는 것은 다른 RDBMS에 비해 상대적으로 복잡할 수 있다. 속도가 느리다.
데이터 웨어하우징과 OLAP
MySQL은 주로 OLTP(Online Transaction Processing) 시스템에 사용되며, 대량의 데이터를 다루는 데이터 웨어하우징이나 OLAP(Online Analytical Processing)에는 비교적 약할 수 있다.
즉 빅데이터 처리가 힘들다.
MySQL 설치
SQL 기초
SQL의 종류
DDL(Data Definition Language)
DDL은 데이터베이스, 테이블, 인덱스 등의 스키마(데이터를 정의한 구조)를 생성, 변경, 삭제하는 역할을 한다.
CREATE, ALTER, DROP 등의 명령어가 있다.
데이터 정의할 때 사용한다.
DML(Data Manipulation Language)
DML은 테이블에 저장된 데이터를 실질적으로 처리하는 부분으로, 데이터의 검색, 삽입, 수정, 삭제 등을 담당한다.
SELECT, INSERT, UPDATE, DELETE 등의 명령어가 있다.
데이터 조작할 때 사용한다.
DCL(Data Control Language)
DCL은 데이터베이스에 대한 접근을 관리하고, 데이터의 보안, 무결성 등을 다룬다.
GRANT(권한 부여), REVOKE(권한 회수) 등의 명령어가 있다.
데이터 제어어라고 한다.
+ TCL
나열된 명령어를 한 단위로 보는 것.
자바에서의 코드 블록이라고 생각하면 된다.
SQL의 주요 장점
표준화
SQL은 ANSI(American National Standards Institute)와 ISO(International Organization for Standardization)에 의해 표준화된 언어이다.
따라서, 대부분의 RDBMS에서 SQL을 사용할 수 있습니다.
함수와 보조적인 부분이 다르다.
직관적
SQL은 비교적 배우기 쉽고 이해하기 쉬운 언어로, 데이터를 관리하는 데 필요한 명령을 직관적인 문법으로 제공한다.
명령문 그대로 작성한다.
강력한 성능
SQL은 복잡한 쿼리를 작성할 수 있으며, 대용량의 데이터를 효율적으로 처리할 수 있다.
여러개의 테이블(복잡한 쿼리)을 조회하여 하나의 결과로 보기 쉽다.
SQL 기초 : DDL(Data Definition Language) - 주석, 데이터타입, 스키마
DDL (Data Definition Language. 데이터베이스 정의어)
데이터베이스 스키마를 정의할 때 사용되는 명령어이다.
스키마 : 데이터 구조를 정의한 것. 아주 큰 단위의 기능에 필요한 데이터 구조를 정의한 것.
CREATE, ALTER. DROP가 있다.
# , -- : 주석
데이터베이스의 데이터 타입
CREATE TABLE data_type (
column1 INT, # 정수형 데이터 타입
column2 DOUBLE, # 실수형 데이터 타입
column3 BOOLEAN, # 논리형 데이터 타입 (0 : false, 1 : true)
column4 VARCHAR(10) # 문자열 데이터 타입 (길이를 포함한다)
column6 DATE, # 날짜 데이터 타입
column7 TIME, # 시간 데이터 타입
column8 DATETIME # 날짜 및 시간 데이터 타입
);
SQL 기초: DDL(Data Definition Language) - CREATE생성, ALTER변경, DROP삭제
CREATE
CREATE 문은 새로운 데이터베이스, 테이블, 인덱스를 생성하는 데 사용된다.
CREATE DATABASE human_resource;
USE human_resource; # 데이터베이스 사용 준비 완료.
CREATE TABLE employee (
employee_number VARCHAR(20),
name VARCHAR(20),
age INT
);
CREATE USER 'developer01'@'localhost' IDENTIFIED BY 'qlalfqjsgh';
USE MYSQL; # MYSQL에 접근한다.
SELECT * FROM USER; # 저장된 USER 정보 확인
ALTER
ALTER 문은 기존의 데이터베이스, 테이블, 인덱스의 스키마를 수정하는 데 사용된다.
테이블 수정
테이블 컬럼 추가
ALTER TABLE employee ADD address TEXT;
ALTER TABLE employee DROP COLUMN address;
ALTER TABLE employee MODIFY COLUMN employee_number VARCHAR(10);
DROP
DROP 문은 기존의 데이터베이스, 테이블, 인덱스를 삭제하는 데 사용된다. DROP을 사용하면 데이터와 함께 스키마도 완전히 제거되므로 주의가 필요하다.
DROP TABLE employee;
DROP DATABASE human_resource;
=======================================================================
게시판 프로젝트 스키마 정의
데이터베이스 생성
CREATE DATABASE sample_board1_1;
USE sample_board1_1;
데이터베이스 테이블 생성
회원정보(user) / 게시물(board)
CREATE TABLE user (
email VARCHAR(50),
password VARCHAR(255),
nickname VARCHAR(20),
tel_number VARCHAR(15),
address TEXT,
address_detail TEXT,
agreed_personal BOOLEAN,
profile_image TEXT
);
CREATE TABLE board (
board_number INT,
title TEXT,
contents TEXT,
write_datetime DATETIME,
writer_email VARCHAR(50),
writer_nickname VARCHAR(20),
writer_profile_image TEXT,
view_count INT
);
RDBS의 단점. 배열을 표현할 수 없다.