오늘은 Xampp 설치부터 시작했다. DB를 시작한다는 뜻이다.
개발환경 세팅을 쉽게해주는 툴 -> xampp
MySql
-서버 : 데이터를 전달해준다.
-클라이언트
웹
-서버 (아파치, nginx)
-클라이언트 (브라우저(클라이언트 프로그램))
클라이언트에 요청을 하면 서버가 전달해준다.
MySql != DB, MySql == DB
DBMS(MySql) -> 관리
MySql은 데이터베이스들을 관리한다.
데이터베이스 안에 데이터는 테이블(table)안에 표로 이루어져 있다.
터미널에서 확인할 수 있지만 보기 힘들기 때문에 MySqlyog를 다운 받아서 사용한다. 나는 맥 환경이라 다른걸 설치해야한다. 그래서 MySql workench를 설치했다.
사용법을 대충 톮아보면,
| 데이터 유형 | 정의 |
|---|---|
| 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 문제를 풀어보았다.
# 전체 데이터베이스 리스팅
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 서버만 사용하니까 잘 됐다. 이거 해결하는데 시간 너무 많이 잡아먹어서 강의를 제대로 듣지 못했다. 오늘은 수업 끝나면 하나 더 남은 문제를 풀어야겠다. 원래는 게시판 더 해보려고 했는데 그건 주말에 해야될 것 같다. 오늘 배운건 오늘 복습해야지 안그러면 휘발된다.