Coding History

국비 지원 IT(웹앱개발) 취업반 강의 22일차 (DB, DBMS, RDBMS)

BlackBirdIT 2024. 7. 5. 17:53

오늘은 Xampp 설치부터 시작했다. DB를 시작한다는 뜻이다.

개발환경 세팅을 쉽게해주는 툴 -> xampp

MySql
-서버 : 데이터를 전달해준다.
-클라이언트


-서버 (아파치, nginx)
-클라이언트 (브라우저(클라이언트 프로그램))

클라이언트에 요청을 하면 서버가 전달해준다.

MySql != DB, MySql == DB

DBMS(MySql) -> 관리
MySql은 데이터베이스들을 관리한다.

데이터베이스 안에 데이터는 테이블(table)안에 표로 이루어져 있다.

터미널에서 확인할 수 있지만 보기 힘들기 때문에 MySqlyog를 다운 받아서 사용한다. 나는 맥 환경이라 다른걸 설치해야한다. 그래서 MySql workench를 설치했다.

사용법을 대충 톮아보면,

MySql 데이터 타입

문자형 데이터 타입

데이터 유형 정의
CHAR(n) 고정 길이 데이터 타입(최대 255byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간 공백으로 채워진다.
VARCHAR(n) 가변 길이 데이터 타입(최대 65535byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간은 채우지 않는다.
TINYTEXT(n) 문자열 데이터 타입(최대 255byte)
TEXT(n) 문자열 데이터 타입(최대 65535byte)
MEDIUMTEXT(n) 문자열 데이터 타입(최대 16777215byte)
LONGTEXT(n) 문자열 데이터 타입(최대 4294967295byte)
JSON JSON 문자열 데이터 타입 - JSON 형태의 포맷을 꼭 준수해야 한다.

숫자형 데이터 타입

데이터 유형 정의
TINYINT(n) 정수형 데이터 타입(1byte) -128 ~ +127 또는 0 ~ 255수 표현할 수 있다.
SMALLINT(n) 정수형 데이터 타입(2byte) -32768 ~ 32767 또는 0 ~ 65536수 표현할 수 있다.
MEDIUMINT(n) 정수형 데이터 타입(3byte) -8388608 ~ +8388607 또는 0 ~ 16777215수 표현할 수 있다.
INT(n) 정수형 데이터 타입(4byte) -2147483648 ~ +2147483647 또는 0 ~ 4294967295수 표현할 수 있다.
BIGINT(n) 정수형 데이터 타입(8byte) - 무제한 수 표현할 수 있다.
FLOAT(길이, 소수) 부동 소수형 데이터 타입(4byte) -고정 소수점을 사용 형태이다.
DECIMAL(길이, 소수) 고정 소수형 데이터 타입고정(길이+1byte) -소수점을 사용 형태이다.
DOUBLE(길이, 소수) 부동 소수형 데이터 타입(8byte) -DOUBLE을 문자열로 저장한다.

날자형 데이터 타입

데이터 유형 정의
DATE날짜(년도, 월, 일) 형태의 기간 표현 데이터 타입(3byte)
TIME시간(시, 분, 초) 형태의 기간 표현 데이터 타입(3byte)
DATETIME 날짜와 시간 형태의 기간 표현 데이터 타입(8byte)
TIMESTAMP 날짜와 시간 형태의 기간 표현 데이터 타입(4byte) -시스템 변경 시 자동으로 그 날짜와 시간이 저장된다.
YEAR 년도 표현 데이터 타입(1byte)

이진 데이터 타입

데이터 유형 정의
BINARY(n) & BYTE(n) CHAR의 형태의 이진 데이터 타입 (최대 255byte)
VARBINARY(n) VARCHAR의 형태의 이진 데이터 타입 (최대 65535byte)
TINYBLOB(n) 이진 데이터 타입 (최대 255byte)
BLOB(n) 이진 데이터 타입 (최대 65535byte)
MEDIUMBLOB(n) 이진 데이터 타입 (최대 16777215byte)
LONGBLOB(n) 이진 데이터 타입 (최대 4294967295byte)

sql 데이터 타입 출처

그렇게 설치와 기본 개념을 좀 보고 sql 문제를 풀어보았다.

# 전체 데이터베이스 리스팅
SHOW databases;
# `mysql` 데이터 베이스 선택
USE mysql;
# 테이블 리스팅
show TABLES;
# 특정 테이블의 구조
DESC user;
# `test` 데이터 베이스 선택
use test;
# 테이블 리스팅
show tables;
# 기존에 a1 데이터베이스가 존재 한다면 삭제
Drop DATABASE if EXISTS a1;
# 새 데이터베이스(`a1`) 생성
CREATE DATABASE a1;
# 데이터베이스(`a1`) 선택
use a1;
# 데이터베이스 추가 되었는지 확인
show databases;
# 테이블 확인
show tables;
# 게시물 테이블 article(title, body)을 만듭니다.
# VARCHAR(100) => 문자 100개 저장가능
# text => 문자 많이 저장가능
CREATE TABLE article(
    title char(100),
    body TEXT);
# 잘 추가되었는지 확인, 리스팅과 구조까지 확인
SHOW TABLES;
DESC article;
# 데이터 하나 추가(title = 제목, body = 내용)
INSERT INTO article
SET title = '제목1',
body = '내용1';
# 데이터 조회(title 만)
SELECT title
FROM article;

# 데이터 조회(title, body)
SELECT *
FROM article;

# 데이터 조회(body, title)
SELECT body,
title
FROM article;

# 데이터 조회(*)
SELECT *
FROM article;

# 데이터 또 하나 추가(title = 제목, body = 내용)
INSERT INTO article
SET title = '제목1',
body = '내용1';

# 데이터 조회(*, 어떤게 2번 게시물인지 알 수 없음)
SELECT *
FROM article;

# 테이블 구조 수정(id 칼럼 추가, first)
ALTER TABLE article ADD COLUMN id int(10);
# 데이터 조회(*, id 칼럼의 값은 NULL)
SELECT *
FROM article;

# 기존 데이터에 id값 추가(id = 1, id IS NULL)
UPDATE article
SET id = 1
WHERE id IS NULL;

# 데이터 조회(*, 둘다 수정되어 버림..)
SELECT *
FROM article;

# 기존 데이터 중 1개만 id를 2로 변경(LIMIT 1)
UPDATE article
SET id = 2 LIMIT 1;
# 데이터 조회(*)
SELECT *
FROM article;

# 데이터 1개 추가(id = 3, title = 제목3, body = 내용3)
INSERT INTO article
SET title = '제목3',
body = '내용3',
id = 3;
# 데이터 조회(*)
SELECT *
FROM article;

# 2번 게시물, 데이터 삭제 => DELETE
DELETE
FROM article
WHERE id = 3;

# 데이터 조회(*)
SELECT *
FROM article;

# 날짜 칼럼 추가 => regDate DATETIME
ALTER TABLE article ADD COLUMN regDate DATETIME FIRST;

# 테이블 구조 확인
DESC article;

# 데이터 조회(*, 날짜 정보가 비어있음)
select *
from article;

# 1번 게시물의 비어있는 날짜정보 채움(regDate = 2018-08-10 15:00:00)
UPDATE article
set regDate = '2018-08-10 15:00:00' 
where id = 1;

# 데이터 조회(*, 이제 2번 게시물의 날짜 정보만 넣으면 됩니다.)
select *
from article;
# NOW() 함수 실행해보기
SELECT now();

# 3번 게시물의 비어있는 날짜정보 채움(NOW())
UPDATE article
set regDate = now()
where id = 3;

# 데이터 조회(*)
select *
From article;

now() 함수가 제대로 먹지 않는 에러때문에 계속 막혀있었는데 기존에 사용하던 MySpl을 삭제하고 xampp의 MySql 서버만 사용하니까 잘 됐다. 이거 해결하는데 시간 너무 많이 잡아먹어서 강의를 제대로 듣지 못했다. 오늘은 수업 끝나면 하나 더 남은 문제를 풀어야겠다. 원래는 게시판 더 해보려고 했는데 그건 주말에 해야될 것 같다. 오늘 배운건 오늘 복습해야지 안그러면 휘발된다.