Structured Query Language
데이터베이스용 프로그래밍 언어이자 구조화 된 Query언어
Query? : (저장 정보를 필터하는) 질의문
In-memory(client): 임시 메모리로 끄면 데이터가 손실
File I/O(server): 필요시마다 전체 파일을 확인해야 함. 파일이 클수록 비효율적
Databace: 필터링 외에도 File I/O로 구현이 힘든 관리기능 등 데이터에 특화 됨
데이터베이스 내 트랜잭션의 안정성을 보장할 수 있는 성질
트랜잭션
명령 쿼리를 모아놓은 하나의 작업 단위
Atomicity(원자성)
하나의 트랜젝션은 모든 작업이 일괄적으로 성공하거나 실패해서 예측가능 해야 한다
일부가 실패하면 그 작업은 실패한 것으로 본다
Consistency(일관성)
하나의 트랜젝션 전후에 데이터베이스의 일관성이 유지되어야 한다
Isolation(격리성)
각각의 트랜젝션은 서로의 연산을 확인받거나 영향을 줄 수 없다
Durability(지속성)
하나의 성공된 트렌젝션에 대한 로그는 영구적으로 남는다
Lock
랜잭션 간에 데이터 접근을 조정하고 충돌을 방지하여 일관성을 유지
하나의 트랜잭션이 데이터를 읽거나 수정할 때 해당 데이터에 락을 걸어 다른 트랜잭션이 해당 데이터에 접근하는 것을 막아 순서대로 실행할 수 있게 함
Blocking
먼저 Lock을 설정한 트랜잭션으로 나머지 트랜잭션을 진행하지 못하고 멈춰선 상태
기다리거나 rollback해야 함.
교착상태(Dead Lock)
두개 이상의 트랜잭션이 서로 lock을 획득한 채 다른 트랜잭션이 소유한 잠금을 요구하며 무한정 대기하는 상태, 대기시간을 정하거나 한쪽을 롤백처리하는 방법이 있다
🌠SQL
관계형 데이터베이스
구조와 데이터 타입을 사정에 정의(고정된 형식의 스키마)
구조화된 쿼리 언어
수직적 확장, 데이터베이스 구축에 비용이 많이 듬ex) MySQL, Oracle, SQLite, PostgresSQL, MariaDB
ACID준수, 전자상거래와 금융서비스, 데이터가 구조적이고 일관적인 경우
🌠NoSQL
비관계형 데이터베이스
구조가 없고 키와 값의 형태로 저장(동적으로 스키마의 형태를 관리)
구조화되지 않은 쿼리 언어(데이터 그룹 자체를 조회함에 초점)
수평적 확장, 보다 적은 비용의 서버증설(또는 클라우드)
Key-Value, 문서형, Wide-Column, 그래프 형태로 데이터 저장ex) 몽고DB, Casandra
구조가 중요하지 않는 대용량의 데이터, 클라우드 및 저장공간 활용 필요시,
데이터 구조의 잦은 업데이트
커맨드창에서 mysql-u 아이디명 -p 로 접속하거나,
mysql commend line client로 접속
-> 페스워드 입력
데이터베이스
데이터베이스 전체 조회 SHOW DATABASES;
데이터베이스 생성CREATE DATABASE 데이터베이스_이름;
데이터베이스 사용USE 데이터베이스_이름;
데이터베이스 삭제DROP DATABASE 데이터베이스_이름;
테이블
테이블 생성
create table [테이블명](id int,name vrchar(20));
테이블 확인DESCRIBE 테이블_이름;
테이블 삭제DROP TABLE 테이블_이름;
테이블 비우기TRUNCATE TABLE 테이블_이름;
필드
필드 추가
ALTER TABLE 테이블_이름 ADD 칼럼_이름 [type];
필드 삭제ALTER TABLE 테이블_이름 DROP 칼럼_이름;
SELECT
select문은 언제나 마지막에 실행된다
LIMIT로 출력 제한
count는 null값을 세지 못한다
와일드카드
*,%(0과1,하나이상의 문자),_(문자 하나) //[](문자 포함)-(범위)!
WHERE
범위는 포함으로 시작해서 미포함으로 끝난다
날짜도 문자열이란 사실을 잊지말자
BETWEEN 범위, IN은 열거값으로 OR boolean값 리턴
ORDER BY/GROUP BY
Where문 다음 Group by 서순 확인하기
정렬은 항상 마지막에
JOIN
INNER 교집합
left/right outer join 기준값 + 교차값
union all 합집합
별칭은 여러 테이블이 나와 필드값이 중복되면 무조건 사용
필드명과 형식이 같다고 무조건 같은 데이터라는 보장은 없다
INSERT/UPDATE/DELETE
SUbQUERY
with
SELECT문 쓰기전 별칭을 먼저 등록하자
Subquery
//bquery예시 SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2) FROM customers WHERE CustomerId < 6
SELECT FROM Customers WHERE Country NOT IN ('Norway', 'France');
SELECT FROM Products WHERE Price NOT BETWEEN 10 AND 20;
SELECT FROM Customers AS Consumers;
SELECT FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
가장 많은 고객이 있는 국가부터 고객의 수 나열
SELECT COUNT(CustomerID), Country 고객의 수 나열
FROM Customers
GROUP BY Country 국가부터
ORDER BY COUNT(CustomerID) DESC; 가장 많은 고객이