MariaDB
1일차
DBMS
- 데이터베이스를 관리/운영하는 역할
- 여러 명의 사용자나 응용프로그램이 공유하고 동시에 접근이 가능하다.
데이터의 무결성
- 데이터베이스 안의 데이터는 어떤 경로를 통해 들어왔든 데이터에 오류가 있어서는 안 된다.
- 이를 위한 제약 조건이 존재하는데 간단히 말해서 주민등록번호가 겹치는 사람이 있어선 안 된다는 것을 생각하면 된다.
데이터의 독립성
- 데이터베이스의 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용프로그램에는 영향이 없어야한다.
- 저장된 디스크가 바뀌더라도 기존에 사용하던 응용프로그램은 아무런 변경없이 계속 사용할 수 있어야 한다.
DBMS 분류
- 계층형 DBMS
- 망형 DBMS
- 관계형 DBMS
- 객체지향형 DBMS
- 객체관계형 DBMS
관계형 DBMS
- 데이터베이스 테이블이라 불리는 최소 단위로 구성
- 하나의 테이블이 아닌 여러 개의 테이블로 나누어서 데이터를 저장
- 테이블의 관계를 기본 키와 외래 키를 사용해서 맺어줌으로 테이블을 부모와 자식의 관계로 묶을 수 있음
장점
- 변화에 쉽게 순응할 수 있는 구조
- 유지보수 편리
- 대용량 데이터의 관리가 가능하고 데이터 무결성의 보장이 됨
단점
- 시스템 리소스를 많이 차지해서 시스템이 전반적으로 느려지게 됨
SQL
- Structed Query Language의 약자
- 데이터베이스를 조작하는 언어
- 질의하고 결과를 바로 얻을 수 있는 대화식 언어
MariaDB
- 이제 실습에 들어가보자. 이 곳에서 db를 다운받았다면 employees.sql이라는 파일을 찾을 수 있을 것이다.
- 해당 디렉토리에서 CMD창을 열어보자.
- 다음과 같은 명령어를 입력하자
- mysql -u root -p
- source employees.sql
- 다시 HeidiSQL을 들어가보면 employees가 추가된 것을 확인할 수 있을 것이다.
- 여기서 저장된 데이터에 SQL 쿼리를 통해 수정 및 조회가 가능하다.
- SELECT, UPDATE, DELETE…
- 이제 MySQL Document를 보면서 실습을 해보자.
CREATE DATABASE tutorial;
# tutorial이라는 DB를 만든다.
USE tutorial;
# tutorial이라는 DB를 사용한다.
SHOW TABLES;
# tutorial DB의 TABLE을 보여준다.
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
# pet이라는 Table을 만드는데 pet에는 name, owner, species, sex, birth, death라는 Column이 존재한다.
DESCRIBE pet;
# pet의 Column정보를 자세히 보여준다.
LOAD DATA LOCAL INFILE 'C:/Users/sohn0/Desktop/blog/TIL/DBStudy/pet.txt' INTO TABLE pet
LINES TERMINATED BY '\r\n';
# pet.txt를 pet에 INSERT한다. 주소의 이름에 \이 들어갈 경우 \\로 고치거나 /로 고쳐야함을 주의하자.
pet.txt
Fluffy | Harold | cat | f | 1993-02-04 | |
---|---|---|---|---|---|
Claws | Gwen | cat | m | 1994-03-17 | |
Buffy | Harold | dog | f | 1989-05-13 | |
Fang | Benny | dog | m | 1990-08-27 | |
Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
Chirpy | Gwen | bird | f | 1998-09-11 | |
Whistler | Gwen | bird | 1997-12-09 | ||
Slim | Benny | snake | m | 1996-04-29 |
INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
# 혹은 이렇게 직접 데이터를 추가할 수도 있다.
DELETE FROM pet WHERE name='Slim';
# 이름이 Slim인 data를 제거할 수도 있고
UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
# 이름이 Bowser인 data의 생일을 변경할 수도 있다.
SELECT * FROM pet WHERE birth >= '1998-1-1';
SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
SELECT name, species, birth FROM pet WHERE (species = 'cat' AND sex = 'm');
# 이렇게 다양한 방식으로 데이터를 조회할 수 있다.
SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
# 조회한 데이터를 원하는 방식으로 정렬할 수도 있다.
SELECT * FROM pet WHERE name LIKE '%fy';
# 특정 문자열로 끝나는 이름만 조회할 수도 있다.
SELECT * FROM pet WHERE name LIKE '_____';
# 혹은 글자수가 5글자인 이름만 조회할 수도 있다.
SELECT species, COUNT(*) FROM pet GROUP BY species;
# species별로 몇 마리의 동물이 있는지 count할 수도 있다.
- 정신없이 실습을 해보았다. 이제
CREATE
,SELECT
,DELETE
와 나름 친숙해졌을 것이라 생각한다. - pet Table만 너무 괴롭혀서 슬슬 지루할 거라 생각한다.
- 그런 당신을 위해 새로운 Table을 준비했다. 새로운 Table을 만든다 생각하니 기대되지 않는가!?
event.txt
Fluffy | 1995-05-15 | litter | 4 kittens, 3 female, 1 male |
---|---|---|---|
Buffy | 1993-06-23 | litter | 5 puppies, 2 female, 3 male |
Buffy | 1994-06-19 | litter | 3 puppies, 3 female |
Chirpy | 1999-03-21 | vet | needed beak straightened |
Slim | 1997-08-03 | vet | broken rib |
Bowser | 1991-10-12 | kennel | |
Fang | 1991-10-12 | kennel | |
Fang | 1998-08-28 | birthday | Gave him a new chew toy |
Claws | 1998-03-17 | birthday | Gave him a new flea collar |
Whistler | 1998-12-09 | birthday | First birthday |
CREATE TABLE event (name VARCHAR(20), date DATE, type VARCHAR(15), remark VARCHAR(255));
LOAD DATA LOCAL INFILE 'C:/Users/sohn0/Desktop/blog/TIL/DBStudy/event.txt' INTO TABLE event
LINES TERMINATED BY '\r\n';
SELECT pet.name,
TIMESTAMPDIFF(YEAR,birth,date) AS age,
remark
FROM pet INNER JOIN event
ON pet.name = event.name
WHERE event.type = 'litter';
- JOIN은 SQL에 대한 밍기적1에서 예전에 알아보았다.
- 간단히 알아보자면 pet Table과 event Table에서 이름이 같으면서 event type이 litter인 데이터를 조회하는 것이다.