1. 주요 키워드
- 데이터: 각 항목에 저장되는 값
- 개체(entity): 실체, 객체, 엔티티로 명명함. 즉 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 "집합"
ex) 학생이라는 엔티티는 학버, 이름, 학점, 등록 일자, 생일, 전공 등의 속성으로 구성
- 열(column, field, attribute): RDBMS를 구성하는 entity(개체)의 특성을 기술
- 행(row, tuple, record): attribute 값의 모임
- 도메인: 하나의 attribute가 취할 수 있는 같은 타입의 유일한(atomic) "값들의 집합" (범위? 종류?)
ex) 성별이라는 attribute가 있으면 남, 여가 도메인
(도메인이라는 것도 기본적으로 필드를 설정할 때 int형 등 형식을 설정하고, 참조 조건 등 제약이 걸려있으면 추가되는 것)
- 널(NULL): 특정 필드에 대한 값을 "알지 못하거나", "정해지지 않아" 입력하지 못한 경우 (공백 X)
- 키(key): 테이블의 각 레코드를 구분할 수 있는 값
- 기본 키(primary key, PK): 특정 튜플을 유일하게 구별할 수 있는 속성. 중복 불가, NULL 불가
- 외래키(foreign key, FK): 다른 테이블의 기본 키를 참조하는 필드 집합. PK와 동일한 도메인 (or NULL)
ex) 사원정보를 저장할 때, 사원명을 기본키로 하면 동명이인이 있을 수 있으므로 중복, PK에 적합하지 않음
주민번호도 중복이 없긴 하나 사원정보라는 테이블의 기본키로는 의미가 달라 주민번호보다는 사원번호가 더 적합
2. 데이터 무결성
데이터 무결성: 데이터의 정확성과 일관성을 유지하고 보증하는 것
1) 개체 무결성
기본키와 관련된 것으로 모든 테이블은 기본키를 가져야 하며, 기본키는 고유하고 빈값(Null)이 들어갈 수 없음
2) 참조 무결성
외래키와 관련된 것으로 외래키는 참조 테이블의 기본키 값 또는 Null 값을 가지며, 참조 테이블의 기본키 속성 개수와 도메인이 일치하여야 함.
3. 관계의 종류
일대일 관계:
회원아이디(ID, 회원명)
회원 주소(ID, 주소)
=> 회원아이디와 회원 주소 테이블은 일대일관계 (두 테이블은 합칠 수 있으므로 사실상 거의 사용 X)
일대다 관계: 하나의 레코드가 서로 다른 여러 개의 레코드와 연결. 관계형 DB에서 가장 많이 사용
회원 정보(ID, 회원명, 주소)
주문(주문번호, ID, 메뉴)
다대다 관계:
학생(학번, 학생명)
↕ (다대다관계)
수업(과목코드, 과목명)
위는 아래와 같이 변경할 수 있다.
학생(학번, 학생명)
↕ (일대다관계)
수강(학번, 과목코드)
↕ (다대일관계)
수업(과목코드, 과목명)
수강이라는 테이블을 학생과 수업 테이블 중간에 추가했다. (수강테이블은 PK인 수강번호가 따로 있으면 좋겠죠?)
4. SQL 개요
DDL(Data Definition Language)
CREATE(테이블/DB 생성), DROP(테이블/DB 삭제), ALTER(테이블 스키마 변경) 등
- 기능: DB/Table 구조 정의, 생성, 변경, 삭제
- 트랜잭션 발생 X. Auto Commit.
DML(Data Manipulation Language)
INSERT(데이터 삽입), UPDATE(데이터 수정), DELETE(데이터 삭제), SELECT(데이터 조회) 등
- 기능: 테이블의 데이터 삽입, 수정, 삭제, 조회
- 트랜잭션 발생 O
DCL(Data Control Language)
GRANT(권한 부여), REVOKE(권한 철회) 등
- 기능: DB/Table 권한 부여, 철회
- 트랜잭션 발생 X, Auto Commit.
5. 트랜잭션이란?
1) 개념
트랜잭션: 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연상.
Ex) 금융거래 등
2) 성질 (ACID)
(1) Atomicity (원자성)
트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
(2) Consistency (일관성)
시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
Ex) 트랜잭션 완로 후에도 도메인의 유효범위, 무결성 제약조건 등의 제약조건을 위배하지 않아야 한다.
(3) Isoloation (독립성)
둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
(4) Durability (영속성)
성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
3) 명령어
(1) Commit
하나의 트랜잭션이 정상적으로 완료되면 이 변경사항을 한꺼번에 DB에 영구 반영한다.
(2) Rollback
하나의 트랜잭션 작업이 실패하면 트랜잭션 실행 전으로 되돌림. 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소한다. 모두 취소 대신 부분 취소하고 싶은 경우 SAVEPOINT 사용
-- MySQL
-- 트랜잭션 시작
신규 저장 요청 1
SAVEPOINT 세이브포인트이름;
신규 저장 요청2
ROLLBACK TO 세이브포인트이름; -- 신규 저장 요청 1만 적용됨
COMMIT;
-- MSSQL
SAVEPOINT TRANSACTION 세이브포인트이름;
ROLLBACK TRANSACTION 세이브포인트이름;
'SQL' 카테고리의 다른 글
[SQL] 6장. DDL(DROP, ALTER) (0) | 2023.04.27 |
---|---|
[SQL] 5장. 단축키 (0) | 2023.04.27 |
[SQL] 4장. 기본키, 외래키, 제약 조건 (MSSQL) (0) | 2023.04.27 |
[SQL] 3장. 자료형 (0) | 2023.04.27 |
[SQL] 1장. DB 기본 (0) | 2023.04.26 |