학습 정리/📦 기타

MySQL - 생활코딩 강의내용 정리

무딘붓 2022. 8. 3. 20:17

생활코딩 - DATABASE2 MySQL 강의를 듣고 공부한 내용을 정리한 게시글입니다.


데이터베이스와 SQL등 용어 정리

 

Database : 컴퓨터에 저장되는 구조화된 정보 또는 조직화된 데이터의 모음

SQL : Structured Query Language의 약자로, 데이터베이스 시스템에서 자료를 처리하는 데 사용되는 구조적(S) 데이터 질의(Q) 언어(L)

 

TABLE : 여러 종류의 데이터를 보기 좋게 정리하여 보여주는 것, 가로(=x축)가 행(row), 세로(=y축)가 열(column)

→ 데이터베이스에서는 행이 하나의 DATA, 열이 DATA의 타입(or 구조)로 취급된다.


MySQL의 구조

생활코딩 DATABASE2 MySQL - 7.SQL과 테이블의 구조 갭쳐


- 표(table) : 데이터의 기본 저장 구조
- 스키마(schema=database) : 표의 연관된 데이터들을 그룹핑해서 정리할 때 사용하는 일종의 폴더
- 데이터베이스 서버: 스키마를 저장 및 운영하는 프로그램

- 데이터베이스 클라이언트 : MySQL monitor(CLI), MySQL Workbench(GUI) 등 데이터 베이스에 요청을 하는 프로그램

 


MySQL 설치

 

https://velog.io/@joajoa/MySQL-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95

 

MySQL 다운로드 및 설치 방법

📌Window10에 MySQL 다운로드 및 설치 하기 1. MySQL 홈페이지 접속 MySQL 링크 주소 :

velog.io

나는 위의 블로그를 참고해서 설치했다.

 


MySQL 서버 접속

cd C:\Program Files\MySQL\MySQL Server 8.0\bin	// MySQL 설치 폴더로 이동
mysql -사용자명 -p	// MySQL 실행

cmd(명령프롬프트) 창을 켜고, MySQL이 설치된 폴더로 이동한 뒤, mysql -uroot -p 명령어로 mysql 서버에 접속한다.

사용자 명에는 "root"를 입력하여 루트 유저로 접속할 수 있다.

-p 옵션이 붙어 있을 경우 명령어 입력 시 비밀번호를 물어본다.

 


MySQL 사용자 추가, 수정, 삭제

# 사용자 추가
create user '아이디'@'host' identified by '비밀번호';
create user '아이디'@'%' identified by '비밀번호';		# '%' : 외부에서의 접근을 허용

# 사용자 삭제
drop user '사용자ID'@localhost;
delete from user where user = '사용자ID';

# 등록된 모든 사용자 ID 조회
select * from mysql.user;

# DB 권한 주기
grant all privileges on *.* to '아이디'@'host';				# 모든 권한주기
grant select, insert, update on DB이름.테이블명 to '아이디'@'host';	# 특정 권한(select,insert,update) 부여
FLUSH PRIVILEGES;							# 변경된 권한 내용 적용

# 부여된 권한 확인
SHOW GRANTS FOR '아이디'@'host'

데이터베이스(스키마)의 사용

CREATE DATABASE DB(스키마)이름;	// 데이터베이스 생성
DROP DATABASE DB(스키마)이름;	// 데이터베이스 삭제
SHOW DATABASES; 	// 생성된 데이터베이스 목록을 출력한다.
USE DB(스키마)이름;	// 앞으로 이 데이터베이스를 선택하고 사용
DESC <table>;	# <table>의 구조를 출력한다.
SHOW TABLES;	# 테이블 목록 출력
DROP TABLE 테이블이름				# 테이블 삭제
RENAME TABLE 원래테이블이름 to 새테이블이름;	# 테이블 이름 변경

 


테이블 생성

CREATE TABLE <테이블이름> (
    <컬럼이름1> <datatype>(length),
    <컬럼이름2> <datatype>(length),
    <컬럼이름3> <datatype>(length),
   ....
);

<테이블이름>과 <컬럼이름3>은 원하는 이름을 입력하고,

datatype은 입력할 데이터의 형식을 지정해주면 된다. datatype의 종류는 아래 링크 참조

https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html

https://www.w3schools.com/sql/sql_datatypes.asp

괄호 안의 length는 허용 가능한 글자의 최대 길이를 말한다.

CREATE TABLE topic(		# testTable 테이블 생성
  id INT(11) NOT NULL AUTO_INCREMENT,
  # 이름 id인 컬럼을 추가, 값을 비워둘 수 없고 자동으로 값이 1씩 증가
  title VARCHAR(100) NOT NULL,
  # 이름 title 컬럼을 추가, 가변길이로 20글자까지 허용 (초과하면 짤림), 값을 비워둘 수 없음
  description TEXT NULL,                       (4)
  # 값을 비워두는 것 가능, TEXT는 아주 긴 문자열을 취급할 때 사용하는 타입
  created DATETIME NOT NULL,
  # DATETIME은 날짜와 시간에 관한 타입
  author VARCHAR(30) NULL,
  profile VARCHAR(100) NULL,
  PRIMARY KEY(id));
  # topic의 PRIMARY KEY를 id 컬럼으로 지정.
);

뒤에 추가로 붙은 내용을 설명하면,

NOT NULL : 값을 비워둘 수 없음을 의미

AUTO_INCREMENT : 자동으로 값 1씩 증가

NULL : 값을 비워두는 것을 허용

 


CRUD - 생성, 읽기, 수정, 제거

#데이터 생성하기. 내용1, 2: 컬럼이름 1, 2에 해당하는 내용
INSERT INTO <table> (<컬럼이름1>, <컬럼이름2>, ...) VALUES(<내용1>, <내용2>, ...);


#테이블에서 모든 데이터 불러와서 출력
SELECT * FROM <table>;
#테이블에서 특정 열만 출력
SELECT <column1>, <column2> FROM <table>;
#값이 egoing인 열만 출력
SELECT id,title,created,author FROM topic WHERE author='egoing';  
#id 기준 내림차순으로 출력
SELECT id,title,created,author FROM topic WHERE author='egoing' ORDER BY id DESC;
#위와 동일, 2개만 출력 (코드 제일 끝에 "LIMIT 노출할갯수");
SELECT id,title,created,author FROM topic WHERE author='egoing' ORDER BY id DESC; LIMIT 2


#id=2인 데이터 수정
UPDATE <table> SET <대상컬럼이름1>='바꿀내용', <대상컬럼이름2>='바꿀내용' WHERE id=2;


#id=2인 데이터 삭 
DELETE FROM topic WHERE id=2;

이 중에서 가장 중요하고 복잡한 것은 Read에 쓰이는 SELECT다.

SELECT에 관해 더 자세한 내용은 아래 링크 참조

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

http://www.tcpschool.com/mysql/mysql_basic_select

 


테이블 분리와 JOIN

하나의 테이블을 여러개로 분리

중복되는 값이 여러 데이터에 포함되어있다면, 테이블을 분리하면 관리 및 유지 보수가 쉬워진다.

 

이렇게 저장은 분산해서 하고, JOIN을 이용해 합쳐서 출력 가능하다.

# table1의 val1 과 table2의 val2를 기준으로 두 테이블을 붙여서 출력한다.
SELECT * FROM <table1> LEFT JOIN <table2> ON <table1>.<val1> = <table2>.<val2>;

출력 예시
author_id와 id를 제외해서 출력한 예시