코드스테이츠 BE 31일차 - 관계형 데이터베이스 SQL

coding infant·2022년 8월 4일

코드스테이츠BE

목록 보기
31/48

[SQL]

Structured Query Language 구조화된 쿼리 언어

  • query : 질의문. 검색할 때 적는 검색어. 저장되어 있는 정보를 필터 하기 위한 질문

  • SQL : 데이터베이스 용 프로그래밍 언어. 데이터 구조 고정되어 있어야.

(<-> NoSQL : 데이터 구조 고정되어 있지 않은 데이터베이스. 문서 지향)

orm 은 자바스크립트로

데이터베이스가 필요한 이유?
In-Memory는 끄면 데이터가 없어짐.
File I/O 는 원하는 데이터만 가져올 수 없고, 항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요 (엑셀시트, CSV) 비효율적

SQL 데이터베이스 언어는 필터링 외에도 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화 (MySQL, Oracle, SQlite 등)

row : 행
column : 열
select : (모든 열을) 선택해라

[SQL 기본 문법]

Select

Where

And, Or, Not

Order By

Insert Into

Null Values

Update

Delete

Count

Like

Wildcards

Aliases

Joins

Inner Join

Left Join

Right Join

Group By

데이터베이스 관련 용어

SQL Create DB

SQL Drop DB

SQL Create Table

SQL Drop Table

SQL Alter Table

SQL Not Null

SQL Unique

SQL Primary Key

SQL Foreign Key

SQL Default

SQL Auto Increment

SQL Dates

[SQL 명령어]

CREATE DATABASE 데이터베이스이름;            // 데이터베이스 생성
USE 데이터베이스이름;                        // 데이터베이스 사용
 
CREATE TABLE user (                     // 테이블 생성
    id int PRIMARY KEY AUTO_INCREMENT,  // 숫자. Primary key, 자동으로 증가되도록 설정 
    name varchar(255),                  // 문자열. 최대 255개의 문자
    email varchar(255)                  // 문자열. 최대 255개의 문자
);                                  

DESCRIBE user;                          // 테이블정보 확인

SELECT                                  // 데이터셋에 포함될 특성 특정
SELECT 'hello world'                    // 일반 문자
SELECT 2                                // 숫자
SELECT 15 + 3                           // 간단한 연산

FROM                                    // 테이블 작업시 반드시 입력. 결과 도출해 낼 데이터베이스 테이블을 명시

WHERE                                   // 필터 역할 (아닐 때 where not 특성 = '특정값')
WHERE 특성1 >= "특정값"                    // 특정 값보다 크거나 같은 값을 필터할 때
WHERE 특성2 LIKE "%특정문자열%"             // 문자열에서 특정 값과 비슷한 값들을 필터할 때. "LIKE", "\%", "\*" 등 사용
WHERE 특성3 IN ("특정값1", "특정값2")       // 리스트값과 일치하는 데이터를 필터할 때
WHERE 특성4 IS NULL                      // 값이 없는 경우 'NULL'을 찾을 때 'IS'와 함께 사용
WHERE 특성5 IS NOT NULL                  // 값이 없는 경우를 제외할 때는 'NOT'을 추가해 이용

ORDER BY 특성1                           // 데이터 결과 정렬 및 출력 방법 (기본 오름차순 정렬)
ORDER BY 특성2 DESC                      // 내림차순 정렬

LIMIT                                   // 결과로 출력할 데이터의 갯수. 가작 마지막에 추가

DISTINCT                                // 유니크한 값을 받고 싶을 때

INNER JOIN                              // 둘 이상의 테이블을 공통된 부분 기준으로 연결

OUTER JOIN                              
LEFT OUTER JOIN 테이블2 ON 테이블1 특성A = 테이블2 특성B   // LEFT OUTER JOIN으로 LEFT INCLUSIVE 실행

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

Insert into 넣을곳 (
범주1,
범주2, ... 
)

Values (
'값1',
'값2', ...
)

<> 같지 않다. !=

not

UPDATE 테이블이름
열이름2 = '열이름지정2'
WHERE 조건값 = '조건이름지정';

delete from 테이블 : 기록 지우기

Funtion 쓰기

SELECT MIN(열 이름)
FROM 테이블이름
WHERE 조건;

create <-> drop (지우기)

두 번째 글자 a : _a

a부터 f까지 : [a-f]

별칭 (ALIAS) : as

select count group by~

[ACID]

ACID : 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질. 금융앱에서 무조건 사용해야!

트랜잭션 : 데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위해 행해지는 하나 이상의 쿼리를 모아놓은 하나의 작업 단위 (계좌이체

Atomicity : 원자성. 하나의 트랜잭션 내에서는 모든 연산이 성공하거나 모두 실패해야 한다 (롤백)

Consistency : 일관성. 하나의 트랜잭션 전후에 데이터베이스의 일관된 상태가 유지되어야 한다

Isolation : 격리성. 각각의 트랜잭션은 독립적. 서로의 연산을 확인받거나 영향을 줄 수 없다

Duration : 지속성. 하나의 성공된 트랜잭션에 대한 로그가 기록되고 영구적으로 남는다

[SQL vs NoSQL]

데이터베이스 스키마 : 데이터베이스에서 자료의 고조, 표현방법, 자료간의 관계를 형식 언어로 정의한 구조

[MySQL 명령어]

터미널에서 홈브루로 MySQL 설치

// List of all MySQL commands:
// Note that all text commands must be first on line and end with ';'

?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.

[MySQL 비밀번호 초기화 및 재설정 - 맥북 터미널 사용]

  1. 서버중지
mysql.server stop
  1. 서버 재시작
mysql.server start --skip-grant-tables
  1. root 계정에 접근 후 비밀번호 변경
mysql -u root
  1. 비밀번호 null 로 임시 변경
update mysql.user set authentication_string=null where user='root';
  1. flush privileges로 변경된 권한 설정
flush privileges
;
  1. MySQL 재시작
mysql.server restart;
  1. 비밀번호 변경
mysql -u root;
alter user 'root'@'localhost' identified with caching_sha2_password by '새 비밀번호';
  1. 비밀번호 변경 확인
mysql -u root -p

이렇게 뜬다면 성공!

0개의 댓글