본문 바로가기

Database

[DB] mySQL 사용하기 | 이해하기 | CRUD | 데이터베이스

728x90

✔︎ SQL은 무엇인가?

Structured 

: 표의 형식으로 정리. 정리정돈을 하는 것. 이것을 구조화 되었다고도 할 수 있다.

 

Query

: 데이터베이스에게 데이터 읽어줘. 수정해줘. 만들어줘. 등의 요청(질의)한다는 뜻.

 

Language

: 데이터베이스도 이해할 수 있고, 나도 이해할 수 있는 공통의 약속으로 요청하는 언어(SQL). 

 

✔︎ 터미널로 SQL 시작하기

# change directory 해당 디렉토리로 이동
cd /usr/local/mysql/bin
# root라는 기본유저 root로 접속
# root는 관리자이기 때문에 중요한 시스템이라면 별도의 사용자를 만들어 사용하고, 중요한 일일 때만 root 사용 권장

./mysql -uroot -p

# ./mysql을 쓰고 싶어. 라고 알리기. 
# -u : user 
# root : root라는 user로 접속하겠다.
# -p : password를 입력할 거야. mysql root 비밀번호 입력하면 됨(처음 설치할 때 입력한 비번)

 

✔︎  SQL의 구조

✔︎ 테이블 :  데이터를 기록하는 곳

ex) 글들을 저장하는 테이블, 댓글을 저장하는 테이블, 회원정보를 저장하는 테이블 등등

 

✔︎ 데이터베이스(스키마) : 서로 연관된 테이블들을 그룹핑함. 일종의 파일의 디렉토리 같은 것

ex) 유저 관련 스키마 (글, 댓글, 회원정보 테이블을 모아놓은 일종의 폴더)

 

✔︎ 데이터베이스 서버(mySQL) : 데이터베이스(스키마)들이 많아졌을 때 저장하는 곳

 

데이터베이스 서버의 장점 

: 자체적인 보안체계를 사용하기 때문에 데이터를 안전하게 보관 가능

: 권한 기능 -> 여러 유저에게 권한을 다르게 줄 수 있음. 어떤 유저는 읽기만 가능. 어떤 유저는 읽기, 쓰기, 다 가능.

 

 

Column : 데이터의 타입, 데이터의 구조

Row : 데이터 하나 하나, 데이터 자체

 

 

✔︎  데이터베이스(스키마) 만들기

# CREATE DATABASE 만들고싶은이름
CREATE DATABASE test;

# 잘못 입력했을 때나 삭제하고 싶을 때
DROP DATABASE test;

 

✔︎  데이터베이스 (스키마) 확인하기

SHOW DATABASES

# SHOW SCHEMAS도 가능

 

✔︎  데이터베이스 (스키마) 사용하기

# 원하는 데이터베이스로 들어가기(선택, 사용하기)
use test;

 

✔︎  스키마에서 테이블 생성하기 (INSERT)

(1)카테고리(column) 만들기

 

👍 검색팁

create table in mysql
create table in mysql cheat sheat (컨닝페이퍼라는 뜻)
mysql datatype number (topic 만들 때 넣는 데이터타입 검색 ex)id는 숫자타입, title은 문자타입 등등)

 

다음과 같은 표를 생성할 예정

✔︎ 테이블 카테고리 생성하기

# 어떤 스키마를 사용할지 선택
use test;


# 테이블 만들기 (글들을 topic이라는 표에 저장할 것이기 때문에 이름을 topic으로.)
CREATE TABLE topic( 
    id INT(11) NOT NULL AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    description TEXT NULL,
    created DATETIME NOT NULL,
    author VARCHAR(30) NULL, # 작성자 익명일 수 있으니
    profile varchar(100) NULL, # 자기소개 안 할 수도 있으니
    PRIMARY KEY(id) # 메인 키 설정, 중복 방지
   );
* 여기서 한 줄 띄어쓰기(enter)는 가독성 측면에서만 띄어져있고, 실제로는 한 줄로 쭉 붙어있는 형태이다. 그리고 마무리 할 때 ; 입력
# 데이터타입 (INT, TEXT 등) : 자신이 수용하려고 하는 데이터의 최댓값에 가장 가까운 데이터타입을 선택! 너무 큰 걸 사용하면 저장공간을 많이 차지하기 때문에 컴퓨터 시스템이 느려질 수 있기 때문
# INT(11) :  11은, 숫자를 검색할 때 얼마까지만 노출시킬까 하는 것. 11로 많이 쓴다고 함
# NOT NULL : 값이 없는 것을 허용하지 않겠다. 필수로 쓰겠다. 
# AUTO_INCREMENT : 자동으로 1씩 증가한다. id 값이 데이터 생성될 때마다 자동으로 1씩 증가되게 만들어서 중복되지 않게 만들겠다.
# VARCHAR(100) : variable + char (변수 + 문자). 255문자까지만 받는 데이터타입. 100글자만 필요하므로 VARCHAR사용. 만약 1000글자를 입력하면 딱 100글자에서 잘라서 많은 것은 지워버림(버려버림)
# TEXT : 65000개의 문자를 허용. 글은 제목보다는 좀 길테니까 TEXT로 해줌.
# NULL : 안 쓰는 것도 허용한다. 필수 아님.
# DATETIME : 9999-12-31 23:59:59 날짜, 시간 둘다 필요한 데이터타입이라 사용
# PRIMARY KEY : 메인키라는 의미(중요한 것). 중복을 방지. "데이터베이스야, id 컬럼은 가장 중요한 컬럼인데, 이 컬럼은 각각의 값들이 고유해야해. 중복되면 안돼."

 

✔︎ 데이터 타입

✔︎ 테이블 카테고리 삭제하기

# 잘못 입력했을 때나 삭제하고 싶을 때
DROP TABLE topic;

 

✔︎ 테이블 수정하기 

✔︎ column(카테고리) 추가

ALTER TABLE topic ADD COLUMN hashtag varchar(30)

✔︎ column(카테고리) 변경

ALTER TABLE topic CHANGE COLUMN hashtag hashtag2 varchar(20) NULL;

✔︎ column(카테고리) 삭제

ALTER TABLE topic DROP COLUMN hashtag2

✔︎ table 이름 바꾸기

ALTER TABLE topic RENAME topic2;

 

 

(2)column(카테고리) 안의 데이터(row) 만들기

 

👍 검색팁

mysql create row
how to read row in mysql

데이터 생성(추가) 사용예시

만들어야 할 테이블

✔︎ 테이블 데이터(row) 생성하기

SHOW DATABASES # 데이터베이스(스키마) 확인하기

use test; # test 스키마 선택

SHOW TABLES; # test 스키마에 있는 table 목록 보기

DESC topic; # topic 자세히 보기(구조, 카테고리 보기)

# id column은 값을 지정하지 않으면 자동으로 auto_increment가 돼서 추가됨 -> title부터 입력
# NOW()는 현재시간 알아서 입력해주는 함수
INSERT INTO topic (title, description, created, author, profile) 
VALUES ('MySQL','MySQL is ...', NOW(), "k", "developer");

 

DESC topic  결과보기

 

✔︎  스키마에서 테이블 읽기 (SELECT)

 

👍 검색팁

mysql select syntax

 

# 모든 데이터(*) 가져오기
SELECT * from topic;

 

 모든 데이터 가져오기 결과

 

 

# 원하는 데이터만(이 부분을 projection이라고 부름) 가져오기
SELECT id, title, created, author from topic;
# Projection : 여기서 id, title, created, author 이 부분, 원하는 것을 선택하는 부분을 projection이라고 부른다.
SELECT id, title, created, author from topic;

원하는 데이터만 가져오기 결과

 

 

✔︎ 이 외에 여러가지 select 문법 써보기

 

✔︎ column 가져오기

# select_expr (column 가져오는 문법)
# author column 가져오기
SELECT "k"

column 가져오기 결과

select 한거 위에 셀에, 가져온 것 아래셀에.

 

SELECT "k", 1+1;

select 한거 위에 셀에, 가져온 것 아래셀에.

 

 

✔︎ id, title, created, author만 있는 데이터 가져오면서 author가 "k"인 것만 가져오기

SELECT id, title, created, author FROM topic WHERE author='k';

 

✔︎ 큰 숫자대로 정렬하기 (내림차순)

 

정렬하기 전 (before)

 

정렬 후 (after)

SELECT id, title, created, author  FROM topic where author = "m" ORDER BY id DESC;

# id 값을 기준으로 descending(큰 숫자 순, 내림차순)으로 정렬

 

 

❗️ 만약 데이터가 엄청 많은 상태에서 SELECT * from topic을 한다면 거대한 데이터를 불러오면서 시스템에 문제가 생긴다. 멈추거나 난리남.

-> 데이터를 가져올 때 제약을 걸어야한다.

 

✔︎  데이터 원하는 갯수만 보기

# LIMIT 1 : 데이터를 한 개만 보겠다는(가져오겠다는) 의미
SELECT id, title, created, author  FROM topic where author = "m" ORDER BY id DESC LIMIT 1;

LIMIT 하기 전과 LIMIT한 결과

 

✔︎  스키마에서 테이블 수정 (UPDATE)

 

👍 검색팁

mysql update

update 문법

update 전 확인

SELECT * FROM topic;

 

update 하기

 

❗️😱 WHERE문을 빠뜨리면 테이블의 모든 값이 다 SET 값으로 바뀌기 때문에 조심!

UPDATE topic SET title='Oracle', description='Oracle is...' WHERE id=2;
UPDATE 원하는 스키마 이름 SET 원하는 키  = 'value' WHERE 바꾸려고하는카테고리=카테고리값

 

✔︎  스키마에서 테이블 삭제 (DELETE)

 

👍 검색팁

SQL Delete in mySQL

delete 문법

delete 전 확인

SELECT * FROM topic;

 

delete 하기

❗️😱 WHERE문을 빠뜨리면 테이블의 모든 값이 다 삭제되기 때문에 조심!

# 삭제하기 (id = 5번째 줄 삭제)
DELETE FROM topic WHERE id = 5;

# 삭제 확인
SELECT * FROM topic;

 

 

계정 비밀번호 변경

ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

 

 

 

 

 

참고자료

생활코딩 mySQL https://www.opentutorials.org/course/3161

mySQL 데이터타입 https://www.techonthenet.com/mysql/datatypes.php

mySQL INSERT w3school https://www.w3schools.com/sql/sql_insert.asp

mySQL SELECT https://dev.mysql.com/doc/refman/8.0/en/select.html

mySQL update https://dev.mysql.com/doc/refman/8.0/en/update.html

mySQL delete https://dev.mysql.com/doc/refman/8.0/en/delete.html

 

 

 

 

 

 

 

728x90