생활코딩 - DATABASE2 MySQL 강의를 듣고 공부한 내용을 정리한 게시글입니다.
데이터베이스와 SQL등 용어 정리
Database : 컴퓨터에 저장되는 구조화된 정보 또는 조직화된 데이터의 모음
SQL : Structured Query Language의 약자로, 데이터베이스 시스템에서 자료를 처리하는 데 사용되는 구조적(S) 데이터 질의(Q) 언어(L)
TABLE : 여러 종류의 데이터를 보기 좋게 정리하여 보여주는 것, 가로(=x축)가 행(row), 세로(=y축)가 열(column)
→ 데이터베이스에서는 행이 하나의 DATA, 열이 DATA의 타입(or 구조)로 취급된다.
MySQL의 구조
- 표(table) : 데이터의 기본 저장 구조
- 스키마(schema=database) : 표의 연관된 데이터들을 그룹핑해서 정리할 때 사용하는 일종의 폴더
- 데이터베이스 서버: 스키마를 저장 및 운영하는 프로그램
- 데이터베이스 클라이언트 : MySQL monitor(CLI), MySQL Workbench(GUI) 등 데이터 베이스에 요청을 하는 프로그램
MySQL 설치
나는 위의 블로그를 참고해서 설치했다.
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>;
'학습 정리 > 📦 기타' 카테고리의 다른 글
Git 사용하기 3 - branch 만들기, 변경사항 버리기 (0) | 2022.08.08 |
---|---|
[Node.js] MySQL 연결시 ER_NOT_SUPPORTED_AUTH_MODE 에러 원인과 해결법 (1) | 2022.08.04 |
Git 사용하기 2 - 버전관리 (0) | 2022.07.26 |
Git 사용하기 1 - Git 설치와 Github 연동 (0) | 2022.07.26 |
[C] 중위수식을 후위수식으로 변환하는 문제에서 단항연산자 처리 (0) | 2022.05.09 |