MS SQL로 알아보는 데이터베이스
데브루키 쿵쾅(김광일)
주제 선정 이유
- 트랜잭션이 뭔지 알기 위해서
- 공채 시험문제에 자꾸 DB 문제가 나옴
- 일부 현업에서 클라 서버의 구분이 점점 사라져감
시작하며
중간에 모르거나 잘못된 내용은 언제나 이야기해 주세요.
뭘 물어볼지 모르겠지만 일단 물어봐야할꺼같으면 일단 손들
어 주세요.
참고자료
이것이 SQL Server다 한빛미디어 우재남 저
유튜브 동영상 강의
https://www.youtube.com/playlist?list=PLVsNizTWUw7Gw_ubikxbzecfveoxemsAs
데이터베이스란?
- 대용량의 데이터 집합을 체계적으로 구성해 놓은 것
데이터 베이스
데이터의 집합
데이터의 집합
DBMS(Database Management System)
- 데이터베이스 관리/운영하는 시스템
- DB를 관리하는 시스템 또는 소프트웨어
Oracle, MySQL, SQLite, MS SQL Server 등이 있다
DBMS의 특징
- 데이터의 무결성: 데이터에 오류가 있어서는 안된다
- 데이터의 독립성: DB의 크기를 변경하거나 저장소를
변경해도 기존에 작성한 응용 프로그램은 전혀 영향을
받지 않음
- 보안: DB에 아무나 접근하지 않고 계정에 따라 권한을
다르게 함
- 데이터 중복의 최소화
DBMS의 종류
- 계층형(Hierarchical) 데이터베이스 관리 시스템
- 네트워크(Network) 데이터베이스 관리 시스템
- 관계형(Relational) 데이터베이스 관리시스템
- 객체지향형(Object Oriented) 데이터베이스 관리 시스템
- NoSQL
RDBMS(Relational Database Management System)
- 데이터베이스 테이블이라는 최소 단위로 구성
- 테이블은 하나이상의 열로 구성
ID 닉네임 직업
zzang 짱구 전사
hun 훈이 궁수
chul 철수 마법사
행(로우)
열(컬럼)
열이름
※ 테이블을 릴레이션 또는 엔티티라고도 부름
SQL(Structured Query Language)
- RDBMS에 데이터를 구축, 관리하고 활용하기 위해 사용
되는 데이터베이스를 조작하는 언어
SQL의 특징
- DBMS 제작회사와 독립적이다.
- 다른 시스템으로의 이식성이 좋다.
- 표준이 계속 발전한다.
- 대화식 언어다.
표준 SQL이 모든 DBMS에 100% 호환되는 것은 아니다.
각 제조사별로 독자적인 기능이 추가됨.
SQL Server Management Studio
데이터베이스 생성(CREATE DATABASE)
CREATE DATABASE [데이터베이스명]
데이터베이스 선택(USE)
USE [데이터베이스명]
데이터베이스 설계
PC방 데이터베이스
회원테이블
구매테이블
데이터베이스 설계
테이블 생성하기(CREATE TABLE)
CREATE TABLE [테이블명]
(
열이름1 자료형 제약조건,
열이름2 자료형 제약조건,
열이름3 자료형 제약조건
);
자료형
숫자 데이터 형식(정수)
자료형 바이트 수 숫자 범위 설명
BIT 1 0 또는 1또는 NULL
Boolean 형인 참과 거짓에 사용
TINYINT 1 0~255 양
의 정수
SMALLINT 2 -32,768~32,767 정수
INT 4 약-21억~21억 정
수
BIGINT 8 -2^63~2^63-1 정수
자료형
숫자 데이터 형식(실수, 돈)
자료형 바이트 수 설명
DECIMAL(p,s) 5~17 고정 정밀도(p)와 배율(s)을 가진 숫자형
decimal(5,2)는 전체 자리수 5
자리, 소수점 이하 2자리
NUMERIC 5~17 DECIMAL과 동일한 데이터형식
FLOAT(n) 4~8 n이 25미만 4, 이상 8바이트 실수
REAL 4 FLOAT(24)와 동일한 실수
MONEY 8 화폐단위로 사용
SMALLMONEY 4 화폐단위로 사용
자료형
문자 데이터 형식
자료형 바이트 수 설명
CHAR(n) 0~8000 고정형 문자형
NCHAR(n) 0~8000 글자로는 0~4000자, 유니코드
고정 길이 문자형
VARCHAR(n|max) 0~2GB 가변길이 문자형
NVARCHAR(n|max) 0~2GB 유니코드 가변길이 문자형
BINARY(n) 0~8000 고정형 이진 데이터값
NVARBINARY(n|max)0~2GB 가변길이 이진 데이터값, 이미지/동영
상 등 저장
자료형
날짜와 시간
자료형 바이트 수 설명
DATETIME 8 날짜 1753-1-1~9999-12-31
까지 저장,
시간 00:00:00~23:59:59.997까지 저장
형식은 YYYY-MM-DD 시:분:초
밀리초(1/1000초) 단위까지 인식
DATETIME2 6~8 DATETIME 확장형 (100나노
초 단위까지 인식)
DATE 3 0001-1-1~9999-12-31까지
저장
TIME 5
제약조건
PRIMARY KEY (기본키) 제약조건
FOREIGN KEY (외래키) 제약조건
UNIQUE 제약조건
CHECK 제약조건
DEFAULT 정의
NULL 값 허용
제약조건
PRIMARY KEY (기본키) 제약조건
많은 행의 데이터를 구분할 수 있는 식별자
중복 X, NULL값을 허용하지 않는다.
주민번호, 이메일, 연락처 등을 주로 기본키로 사용한다.
제약조건
FOREIGN KEY (외래키) 제약조건
두 테이블 사이의 관계를 선언, 데이터의 무결성을 보장
(예, 회원이 아니면 물건을 구매할 수 없음)
외래키를 가지는 테이블을 외래 키 테이블
외래 키에 참고가 되는 테이블을 기준 테이블
제약조건
UNIQUE 제약조건
‘중복되지 않는 유일한 값’을 입력해야하는 제약 조건
기본키와 비슷하지만 NULL값을 한개까지 허용
NULL값이 두개라면 유일하지 않은 값이 된다.
제약조건
DEFAULT 정의
값을 입력하지 않았을 때 자동으로 입력되는 기본값 정의
제약조건
NULL 값 허용
NULL을 허용하려면 NULL, 허용하지 않으려면 NOT NULL
PRIMARY KEY가 설정된 열은 자동으로 NOT NULL
데이터 추가하기(INSERT INTO)
INSERT INTO [테이블명] VALUES(값들…)
테이블 삭제하기(DROP TABLE)
DROP TABLE [테이블명]
위 개그를 더 자세히 이해하기 위해서는 SQL 인젝션에 대해 알아볼 필요가 있습니다
테이블 조회(SELECT ~ FROM ~)
SELECT [컬럼명] FROM [테이블명]
*을 붙일 경우 모든 컬럼(열)을 출력
컬럼에 별칭 붙이기(AS)
SELECT [컬럼명] AS [별칭] FROM [테이블명]
테이블 조회 조건(WHERE)
SELECT [컬럼명] FROM [테이블명] WHERE [조건]
원하는 순서대로 정렬하여 출력(ORDER BY)
SELECT [컬럼명] FROM [테이블명]
ORDER BY [정렬 대상 컬럼명]
묶어서 조회 (GROUP BY)
다음과 같은 테이블에서 각 아이디별로 묶어서 구매 개수
또는 구매 총 금액에 대해 알고싶을 때 사용
묶어서 조회 (GROUP BY)
SELECT ~ FROM ~ GROUP BY [묶을 컬럼]
이때 사용한 SUM은 집계함수. 액셀에서 SUM AVG등 동
일한 기능을 하는 함수가 SQL에도 존재.
데이터의 수정 (UPDATE)
UPDATE [테이블명]
SET [열1 = 값1], [열2 = 값2] …
WHERE [조건]
조건을 안쓰면 모든 열의 값이 변경됨
데이터 삭제 (DELETE)
DELETE [테이블명] WHERE [조건]
조건을 안쓰면 모든 행데이터 삭제
SQL 분류
DML(Data Manipulation Language) 데이터 조작어
DDL(Data Definition Language) 데이터 정의어
DCL(Data Control Language) 데이터 조작어
DML(Data Manipulation Language)
데이터가 선택, 삽입, 수정, 삭제 등의 역할을 하는 언어
SELECT, INSERT, UPDATE, DELETE
트랜잭션이 발생한다.
DDL(Data Definition Language)
데이터 베이스 개체를 생성/변경/삭제하는 역할을 하는 언어
CREATE, DROP, ALTER
DCL(Data Control Language)
데이터베이스에 접근하거나 객체에 권한을 주는 등 역할을
하는 언어
GRANT, REVOKE, COMMIT, ROLLBACK
트랜잭션(Transaction)
하나의 논리적 작업단위로 수행되는 일련의 작업
SELECT, INSERT, UPDATE, DELETE가 주로 해당된다.
데이터를 변경하는 쿼리의 묶음이라 생각해도 무관
트랜잭션(Transaction)
DB를 생성하면 위와 같이 두가지 파일이 생성된다.
.mdf: 데이터 파일(테이블, 인덱스 등)
.ldf: 트랜잭션 로그 파일. 작업중 응급상황에도 입력 데이터
를 완전하게 해줌.
트랜잭션(Transaction)
트랜잭션(Transaction)
위 쿼리에서는 트랜잭션이 몇 번 발생하는가?
트랜잭션(Transaction)
정답은 3번이다.
SQL Server에서는 ‘자동 커밋 모드’방식을 디폴트로 사용.
별도로 BEGIN TRANSACTION과
COMMIT TRANSACTION을 붙이지 않는다면 쿼리의 각 문
장마다 자동 포함.
트랜잭션(Transaction)
한번의 트랜잭션에서 처리하고 싶다면 위와 같이 묶어주면
된다.
트랜잭션(Transaction) 처리과정
name gameTime
짱구 0
노진구 0
도라애몽 0
#1: BEGIN TRANSACTION
로그파일(*.ldf)
메모리(데이터 캐시)
데이터 파일(*.mdf)
로그파일의 시작 위치 또는 마지막 체크포인
트
트랜잭션(Transaction) 처리과정
0
name gameTime
짱구 0
노진구 0
도라애몽 0
#1: BEGIN TRANSACTION
#2: UPDATE 0 → 5
로그파일(*.ldf)
메모리(데이터 캐시)
데이터 파일(*.mdf)
5
① ②
③ ④
트랜잭션(Transaction) 처리과정
5 0 0
name gameTime
짱구 0
노진구 0
도라애몽 0
#1: BEGIN TRANSACTION
#2: UPDATE 0 → 5
#3: UPDATE 0 → 7
#4: UPDATE 0 → 3
로그파일(*.ldf)
메모리(데이터 캐시)
데이터 파일(*.mdf)
7
①
②
③
④
3
트랜잭션(Transaction) 처리과정
5 7 3
name gameTime
짱구 5
노진구 7
도라애몽 3
#1: BEGIN TRANSACTION
#2: UPDATE 0 → 5
#3: UPDATE 0 → 7
#4: UPDATE 0 → 3
#5: COMMIT TRANSACTION
로그파일(*.ldf)
메모리(데이터 캐시)
데이터 파일(*.mdf)
①
②
③
④
로그파일의 시작 위치 또는 마지막 체크포인
트
새로운 체크포인트
트랜잭션(Transaction)의 특징
- 원자성: 트랜잭션에 포함되는 모든 작업이 성공적으로 처
리되지 않으면 어떤 작업도 처리되지 않아야함
- 일관성: 시작되기 전과 종료 후 DB가 올바르고 일관된 상
태가 되도록 처리되어야 함
- 고립성: 한 트랜잭션에서 DB를 변경한 내용은 커밋될 때
까지 다른 어떤 질의나 트랜잭션과도 고립되어야 함
- 영속성: 일단 커밋 후 트랜잭션에 의해 변경된 내용은 영
구적이어야 한다.
테이블 합치기 (JOIN)
두개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어
내는 것
테이블 합치기 (JOIN)
SELECT [조회를 원하는 컬럼] FROM [A테이블]
JOIN [B테이블] ON 합치는 조건
테이블 합치기 (JOIN)
SELECT [조회를 원하는 컬럼] FROM [A테이블]
JOIN [B테이블] ON 합치는 조건
JOIN 종류
JOIN의 기본은 INNER JOIN
테이블 합치기 (JOIN)
테이블 합치기 (JOIN)
인덱스(INDEX)
데이터베이스의 성능에 중요한 역할을 하는 개체
특히 조회할 때(SELECT문) 빠르게 접근하도록 도와줌.
인덱스(INDEX)의 개념
가장 쉬운 예로는 책의 맨뒷편 찾아보기 페이지
인덱스(INDEX) 종류와 특징
클러스터형 인덱스: 영어 사전과 같이 책 내용 자체가 순서대
로 정렬되어 있는 형태, 테이블당 한 개만 생성 가능
비클러스터형 인덱스: 책 위에 <찾아보기>가 있는 일반책과
같이 되어있는 형태, 테이블당 여러 개 생성 가능
클러스터형 인덱스는 행 데이터를 인덱스로 지정한 열에 맞
춰 자동 정렬
자동으로 생성되는 인덱스(INDEX)
인덱스는 테이블의 열 단위에 생성된다.
제약조건의 PRIMARY KEY로 생성하면 클러스터형 인덱스가
자동으로 생성
userId를 PRIMARY KEY로
지정하였기에 정렬된 테이블
자동으로 생성되는 인덱스(INDEX)
제약조건의 UNIQUE로 생성할 경우 비클러스터형 인덱스로
생성
즉, 자동으로 인덱스를 생성해주는 제약 조건은
PRIMARY KEY와 UNIQUE 뿐이다.
인덱스(INDEX) 생성
테이블을 생성할 때
CREATE TABLE
(
열이름 자료형 제약조건
CLUSTERED|NONCLUSTERED
)
PRIMARY KEY의 경우에도 명시적으로 비클러스터형 인덱스
를 줄 수 있다.
인덱스(INDEX) 생성
CREATE INDEX CLUSTERED|NONCLUSTERED INDEX 인덱스명
ON 테이블명 (컬럼명)
인덱스(INDEX)의 탐색 방식 B-Tree
Balanced Tree 자료구조로 구성되어 있다.
인덱스(INDEX)를 생성해야하는 경우
- 인덱스는 열 단위에 생성되기에 WHERE 절에 사용되는
열에 만들 것.
- WHERE절에 자주 사용되어야 만들 이유가 더 확실할 것.
- INSERT/UPDATE/DELETE가 자주 일어나는 경우에는 만
들지 않는 것이 좋다.
저장 프로시저(Stored Procedure)
쿼리문의 집합, 프로그래밍의 함수와 유사한 기능
자주 사용되는 일반적인 쿼리를 모듈화 시켜 필요할 때 마다
호출하면 좀 더 편하게 SQL Server를 운영할 수 있다.
저장 프로시저(Stored Procedure) 생성
CREATE PROCEDURE 프로시저명
@입력매개변수1 자료형
@입력매개변수2 자료형
@출력매개변수 자료형 OUTPUT
AS
원하는 기능의 묶음…
GO
저장 프로시저(Stored Procedure) 실행
EXECUTE 프로시저명 @변수입력값, @출력값 OUTPUT
저장 프로시저(Stored Procedure) 실행

181215 MS SQL로 알아보는 데이터베이스