Skip to content

Instantly share code, notes, and snippets.

@Curookie
Last active October 5, 2019 11:53
Show Gist options
  • Save Curookie/a93a54fea8953126591396dcd66554e6 to your computer and use it in GitHub Desktop.
Save Curookie/a93a54fea8953126591396dcd66554e6 to your computer and use it in GitHub Desktop.
DB (데이터 베이스)
데이터 베이스
■ DB 기초 개념 - 키(Key)
키의 종류로는 기본키, 슈퍼키, 후보키, 대체키, 외래키 등이 있다.
1. 슈퍼키(Super Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다. 슈퍼키는 유일성만 만족하면 슈퍼키가 될 수 있다.
- 유일성이란 하나의 키로 특정 행을 바로 찾아낼수 있는 고유한 데이터 속성을 말한다.
예를 들면 전국에서 나를 구별할 수 있는 유일하고 고유한 속성은 주민번호이듯이 말이다.
주민번호는 전국민이 모두 겹치지 않아 유일하고 고유한 구별 방법으로 쓰인다.
2. 후보키(Candidate Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다.
후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야한다.
3. 기본키(Primary Key)
- 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
- 테이블에서 기본키는 오직 1개만 지정할 수 있다.
- 기본키는 테이블 안에서 유일하게 각 행들을 구별할 수 있도록 쓰인다.
- 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없다.
- 각 행들을 구별하려면 값이 없어선 안되고, 중복되어서도 안되기 때문이다.
4. 대체키(Alternate Key)
- 후보키가 두개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라한다.
- 대체키는 기본키로 선정되지 않은 후보키이다.
5. 외래키(Foreign Key)
- 테이블이 다른 테이블의 데이터를 참조하여 테이블간의 관계를 연결하는 것이다. 데이터를 좀더 조회하기 쉽다.
- 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 주는 것이다.
- 참조 될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.
- 이때, 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야한다.
- 외래키는 참조되는 테이블의 기본키와 동일한 키 속성을 가진다.
- 참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야된다.
- 부모 테이블 먼저 삭제될 수 없다. 왜냐하면 부모테이블을 참조하는데 부모테이블이 삭제되면
자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생긴다.
- 외래키 관계에서 부모테이블을 삭제하려면 자식테이블 먼저 삭제한 후 부모테이블을 삭제해야한다.
■ DB 기초 개념 - 트랜잭션
한 번 질의가 실행되면 질의(Query)가 모두 수행되거나 모두 수행되지 않는 작업수행의 가장 작은 논리적 단위입니다.
실행이 중단되면 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 Commit을 하는 실행 단위
■ DB 기초 개념 - 트랜잭션의 ACID(원자성, 일관성, 고립성, 지속성)
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어
원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다.
일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다.
고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다.
지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.
■ DB 기초 개념 - SQL
SQL (Structured Query Language) 은 구조적인 질의 언어 (3가지로 표현한다.)
⒜ DDL : 데이터 정의 언어
⒝ DML : 데이터 조작 언어
⒞ DCL : 데이터 제어 언어
DDL (Data Definition Language) 는 데이터 베이스 스키마를 정의 하거나 조작하기 위해 사용한다.
SCHEMA, DOMAIN, TABLE, VIEW, INDEX 를 다음 명령어로 정의, 변경, 삭제한다.
⒜ CREATE : 정의
CREATE TABLE 테이블_이름 (
속성이름 데이터타입 , <-- 콤마(,)로 속성들 구분, 기본키, 외래키도 동일
[NOT NULL] <-- NULL값 허용 X
[UNIQUE] <-- 유일한 값에 대한 제약
[DEFAULT 기본값] <-- 기본 값을 설정
[CHECK 체크조건] <-- 값에 대한 조건 설정(조건에 괄호)
PRIMARY KEY 속성이름(들) <-- 속성 뒤에 PRIMARY KEY를 추가해서 기본키 설정 가능
FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)
ON UPDATE [NO ACTION | CASCADE | SET NULL | SET DEFAULT] <-- 외래키 조건에 따른 동작설정
ON DELETE [NO ACTION | CASCADE | SET NULL | SET DEFAULT]
);
⒝ ALTER: 수정
ALTER TABLE 테이블이름
[ADD 속성이름 데이터타입]
[DROP COLUMN 속성이름]
[ALTER COLUMN 속성이름 데이터타입]
[ALTER COLUMN 속성이름 [NULL | NOT NULL]]
[ADD PRIMARY KEY(속성이름)];
⒞ DROP : 삭제
DROP TABLE 테이블이름;
⒟ TRUNCATE : DROP 후 CREATE
* Oracle 11g 이전 버전과 MySQL은 DDL에 대해서 트랜잭션을 지원하지 않는다.
(Rollback 할 수 없고 Commit할 필요도 없다.)
DML (Data Manipulation Language) 는 데이터를 조작 (조회, 추가, 변경, 삭제) 하기 위해 사용한다.
사용자가 응용 프로그램과 데이터 베이스 사이에 실질적인 데이터 처리를 위해서 주로 사용한다.
⒜ SELECT : 조회
SELECT [ALL | DISTINCT] 속성이름(들) - '*'은 모든 열을 나타내고 ,DISTINCT는 중복을 제거한다.
FROM 테이블이름(들)
[ WHERE 조건(들) ]
[ GROUP BY 속성이름 ]
[ HAVING 검색조건(들) ]
[ ORDER BY 속성이름 [ ASC | DESC ] - ASC는 오름차순이고 DESC는 내림차순 이다.
⒝ INSERT : 추가
INSERT INTO 테이블이름(속성리스트) VALUES(값리스트);
※데이터 입력시 속성 이름의 생략이 가능하다. 단, 이때 데이터의 입력 순서는 속성의 순서와 일치해야한다.
⒞ DELETE : 삭제
DELETE
FROM 테이블이름
WHERE 검색조건;
⒟ UPDATE : 변경
UPDATE 테이블이름
SET 속성이름1=값1[, 속성이름2=값2, ...]
WHERE 검색조건;
기본적인 위의 명령어 외에 LOCK, EXPLAIN, CALL 등도 DML에 포함 된다.
DCL (Data Control Language) 는 데이터를 제어하는 언어이다.
데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는데 사용한다.
⒜ COMMIT : 트랜잭션의 작업 결과를 반영
⒝ ROLLBACK : 트랜잭션의 작업을 취소 및 원래대로 복구
⒞ GRANT : 사용자에게 권한 부여
⒟ REVOKE : 사용자 권한 취소
■ DB 종류
MySQL
+ MariaDB
Oracle
Firebase
■ 저장 엔진 종류(Storage Engine)
InnoDB
MySQL에서 기본적으로 사용하고 있는 스토리지 엔진입니다.
속도는 MyISAM이나 AriaDB에 비해서 느리지만 Backup과 Failover/Failback 그리고 Transaction-Safe라는 큰 장점을 가지고 있어,
지금까지 널리 사용되고 있는 DBMS입니다.
MyISAM
MySQL의 초창기부터 사용되어 왔던 MyISAM Storage Engine은 기능과 구조가 단순해서 빠른 처리 성능과 쉽게 사용할 수 있다는
장점을 가지고 있었습니다. 하지만 트랜잭션 단위의 작업이 불가능하고, 테이블 수준의 잠금을 사용한다는 단점으로 인해서
InnoDB가 도입되면서 부터 사용하는곳이 많이 줄어들었습니다.
Aria
MyISAM의 이런 단점을 보완하기 위해서 만들어진 스토리지 엔진입니다.
Aira Storage Engine은 MyISAM Storage Engine의 소스코드를 기반으로 해서 만들어진 스토리지 엔진입니다.
Aria Storage Engine 역시 초창기에는 많은 관심을 받았지만
지금은 XtraDB Storage Engine과 TokuDB Storage Engine의 발전에 의해 관심이 줄어들었습니다.
그래서 Aria Storage Engine은 InnoDB를 대체할 정도의 성숙한 것은 아니지만
MyISAM보다는 효율적이고 안정적으로 작동합니다. 그리고 MariaDB의 경우 내부 임시테이블을 생성할 때는
MyISAM Storage Engine이 아닌 Aria Storage Engine을 사용합니다.
■ Inline View란?
SubQuery의 표현 모습. From 절 안에 SQL이 들어가있는 구조의 모습이다.
■ 프로시저
프로시저는 일반 프로그래밍 언어에서 사용하는 함수와 비슷한 개념으로, 작업 순서가 정해진 독립된 수행 단위이다.
① 변수와 매개변수는 @ 기호로 식별한다.
② 매개변수는 저장 프로시저가 호출될 때 그 프로시저에 전달되는 값이다.
③ 변수는 저장 프로시저나 트리거 내에서 사용되는 값이다.
④ 주석은 /* */ 그리고 -- 로 기술한다.
■ 트리거
데이터의 변경(INSERT, DELETE, UPDATE)문이 실행될 때 자동으로 따라서 실행되는 프로시저 이다.
■ PL/SQL
기존의 SQL에 절차지향 프로그래밍 요소를 포함한 프로시저
선언부, 구현부, 예외처리부가 있다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment