전공 지식 정리/데이터베이스 설계

데이터베이스 SQL - TCL, DCL

2022. 11. 30. 22:31
목차
  1. TCL (Transaction Control Language)

트랜잭션 : 데이터베이스의 논리적 연산 단위

- 의미적으로 분할할 수 없는 최소 단위

- 일반적으로 하나의 트랜잭션은 여러 SQL 문장을 포함한다.

- 성공시 모든 연산을 반영, 취소시 모든 연산을 취소한다.

 

트랜잭션 예시)

도서 주문 (재고 수량 감소, 주문 내역 생성, 결제 등)

계좌 이체 (원 계좌의 잔액 감소, 다른 계좌의 잔액 증가 등)

교통카드 충전 (잔액 증가, 결제 등)

 

트랜잭션의 특성 (ACID : Atomicity, Consistency, Isolation, Durability) // 원일고지

원자성 : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.

일관성 : 트랜잭션 실행 전의 데이터베이스 내용이 잘못되어 있지 않다면

트랜잭션 실행 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.

고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션이 영향을 받아서는 안된다.

지속성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

트랜잭션의 ACID 특성을 보장하기 위해 DBMS는 동시성 제어를 수행한다. (Lock 기반, Timestamp 기반)

 

 

TCL (Transaction Control Language)

> COMMIT 실행 전 상태

UPDATE PLAYER SET HEIGHT = HEIGHT + 10;

- 변경된 내용이 메모리에 임시로 저장된다.

- 현재 사용자는 증가한 HEIGHT 값을 읽을 수 있다.

- 다른 사용자는 증가 전 HEIGHT 값만 읽을 수 있다.

- HEIGHT에는 잠금이 설정되어 다른 사용자는 값을 변경할 수 없다.

 

> COMMIT 실행 후

- 변경된 내용은 DB에 저장된다.

- 변경 내용을 모든 다른 사용자가 볼 수 있다.

- 이전 데이터는 모두 사라진다. (별도로 로그 보관시 복구 가능하다.)

- 관련된 행에 대한 잠금이 해제되어 모든 사용자가 변경할 수 있다.

 

트랜잭션을 제어하기 위한 명령어

- COMMIT : 변경된 내용을 DB에 영구적으로 반영한다.

- ROLLBACK

: 기본적으론 변경된 내용을 버리고 변경 전 상태(마지막 COMMIT)로 복귀한다.

  SAVEPOINT(부분 복귀 위해 지정한 저장점)를 지정한 경우 지정한 저장점까지만 복귀한다.

 

트랜잭션은 SQL문 실행 시 자동 시작되며, COMMIT / ROLLBACK 실행 시 종료된다.

 

자동 커밋 / 자동 롤백

- DDL 문장 수행 시 DDL 수행 전에 자동으로 커밋

- DB를 정상적으로 접속 종료하면 자동 커밋

- 애플리케이션의 이상 종료로 DB와의 접속이 단절되었을 때 자동 롤백

 

 

> ROLLBACK 이후 데이터 상태

COMMIT;

UPDATE PLAYER SET HEIGHT = HEIGHT + 10;
DELETE FROM PLAYER;

ROLLBACK;

변경된 내용이 모두 취소된다.

이전 데이터가 재저장된다.

관련된 행에 대한 잠금이 해제되어 모든 사용자가 변경할 수 있다.

 

> SAVEPOINT

SAVEPOINT PT1;

SAVEPOINT PT1;

SAVEPOINT PT3;

ROLLBACK TO PT1; -- 2번으로 ROLLBACK (2번 이후는 무효가 됨)

 

 

ㅡㅡㅡㅡ

 

DCL (Data Control Language)

 

사용자의 계정 생성/삭제, 권한 부여/회수에 대한 명령어

CREATE USER daram IDENTIFIED BY pw1; -- 유저 생성
ALTER USER daram IDENTIFIED BY new_pw; -- 유저 비밀번호 변경

GRANT CREATE USER TO daram; -- daram에게 유저 만들 권한 부여

REVOKE CREATE USER FROM daram; -- daram에게 유저 만들 권한 회수

DROP USER daram -- 사용자(daram)가 객체를 갖고 있지 않은 경우에만 삭제 발생
DROP USER daram CASCADE; -- 사용자가 생성한 객체도 함께 삭제됨

 

세션 생성 권한 , 오브젝트 권한

-- 세션 생성 권한
GRANT CREATE SESSION TO daram;

-- daram 계정에서 자기 계정의 PLAYER 테이블 조회
GRANT SELECT ON PLAYER TO daram;

-- daram 계정에서 pinkbean 계정의 PLAYER 테이블 조회
GRANT SELECT ON pinkbean.PLAYER TO daram;

 

오라클의 ROLE

일반적으로 사용자 생성 시 CONNECT와 RESOURCE를 통해 기본 권한을 부여한다.

CREATE USER daram IDENTIFIED BY mypw;
GRANT CONNECT, DBA, RESOURCE TO daram;

 

 

 

'전공 지식 정리 > 데이터베이스 설계' 카테고리의 다른 글

데이터베이스 SQL - Subquery  (0) 2022.12.19
데이터베이스 SQL - join  (0) 2022.12.19
데이터베이스 SQL - Multi-row Function (다중 행 함수)  (0) 2022.11.29
데이터베이스 SQL - Function  (0) 2022.11.28
데이터베이스 SQL문 DDL  (0) 2022.10.24
  1. TCL (Transaction Control Language)
'전공 지식 정리/데이터베이스 설계' 카테고리의 다른 글
  • 데이터베이스 SQL - Subquery
  • 데이터베이스 SQL - join
  • 데이터베이스 SQL - Multi-row Function (다중 행 함수)
  • 데이터베이스 SQL - Function
daramG
daramG
dotori Java
daramG
다람쥐의 개발 블로그
daramG
전체
오늘
어제
  • 분류 전체보기 (193)
    • Java 코딩테스트 공부 (67)
      • Java 알고리즘 공부 (37)
      • Java 백준 문제풀이 (27)
      • Java 코테 나만의 팁 (3)
    • SQL Study (0)
      • Programmers SQL 문제풀이 (0)
      • SQLP 준비 (0)
    • 웹 개발 지식 정리 (0)
      • Servlet (0)
      • Java 정리 (0)
    • 자바 스프링 (45)
      • 스프링 공부 (4)
      • 스프링 게시판 프로젝트 (6)
      • 부트 블로그 JPA 프로젝트 (30)
      • react & springboot (5)
      • 스프링 오류창고 (0)
      • 리액트 + 스프링 프로젝트 (0)
      • pf (0)
      • pfError (0)
    • React (6)
      • React 정리 (3)
      • React 오류 창고 (3)
    • C++ 코딩테스트 공부 (중단) (20)
      • c++ 백준 문제풀이 (15)
      • c++ 알고리즘 공부 (5)
    • Unity (3)
      • Unity 공부 (3)
    • WebRTC (2)
      • WebRTC 강의학습 정리 (0)
      • WebRTC 프로젝트 (1)
    • 김영한님의 스프링 강의 학습 (10)
      • 스프링 강의 목차 (1)
      • 인텔리제이 & 스프링 기초 (1)
      • 스프링 핵심 원리 (8)
    • 전공 지식 정리 (40)
      • interview (0)
      • Java (0)
      • 운영체제 (4)
      • 데이터베이스 설계 (10)
      • 소프트웨어 공학 (3)
      • 유닉스 (14)
      • 디지털 논리회로 (0)
      • 인공지능 (7)
      • js (0)
      • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 노마드코더의 zoom클론코딩
  • 김영한 스프링 입문
  • 인공지능
  • 데이터베이스 설계
  • 스프링 프로젝트
  • 스프링부트 프로젝트
  • Unity 공부
  • 스프링 공부
  • Java 코테 나만의 팁
  • React&Spring 강의수강
  • 부트 jpa 게시판 프로젝트
  • C++ 알고리즘
  • 스프링부트 블로그 프로젝트
  • java
  • 김영한의 스프링 핵심 원리
  • Java 백준 문제풀이
  • 코테 알고리즘
  • java 알고리즘
  • 백준 c++
  • 유닉스
  • 무서운 이야기
  • 운영체제
  • 디지털 논리회로
  • 김영한 스프링 강의

최근 댓글

최근 글

hELLO · Designed By 정상우.
daramG
데이터베이스 SQL - TCL, DCL
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.