sesac ai 과정/데이터베이스

9월 8일 [데이터 베이스- 서브쿼리, 트랜잭션]

standingR 2023. 9. 8. 19:14

목차.

1.서브 쿼리

https://velog.io/@zionedoha/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

2.트랙잭션

https://codechasseur.tistory.com/29

 

[Database] 트랜잭션(transaction)에 대해 쉽게 알아보자

💡 트랜잭션 트랜잭션이란, 간단히 말해 데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위를 말한다. 만약 작업이 중단됐을 경우 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이

codechasseur.tistory.com

https://mangkyu.tistory.com/30

 

[Database] 8. 트랜잭션, 동시성 제어, 회복

[ 본 사진은 쉽게 배우는 오라클로 배우는 데이터베이스 개론과 실습 ppt에서 캡처했습니다. ]이번 장에서는 트랜잭션(Transaction), 동시성 제어(Locking or Currency Control), 회복(Recovery)에 대해 알아보겠

mangkyu.tistory.com

3.DB API

 

 

1. 서브쿼리 

간단하게 말해서 하나의 SQL문 내에 있는 또 다른 SQL문을 의미한다.

• 주로 SELECT, INSERT, UPDATE, DELETE 문에서 사용

• 서브쿼리는 외부 쿼리의 결과에 영향을 주거나 의존하며, 외부 쿼리 안에서 값을 도출하거나 조건을 만족하는지 확인하기 위해 사용 

->  이 부분이 이해가 잘 되지 않는다.

 

 

서브 쿼리의 활용

 

•  하나의 변수처럼 사용

# 하나의 변수처럼 서브쿼를 활용한 예시 : employess의 테이블에서 연봉이 가장 높은 직원 찾기 
SELECT first_name, last_name
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees); #

• 테이블을 리턴 받아 사용

# 서브쿼리로 부터 테이블을 리턴 받아 사용하는 경우
SELECT StudentName, Age, Grade
FROM Students
WHERE StudentID IN (
    SELECT StudentID
    FROM Grades
    WHERE Subject = 'Math' AND Score >= 80
);

#우리는 지금까지 from을 이용해서 테이블을 불러왔지만 서브쿼리 문을 사용하여서 테이블을 만들고 그 테이블로 쿼리문을 작성해서 사용하였다.

• 하나의 칼럼처럼 사용

# 칼럼 처럼 사용하는 경우 - 직원 테이블에서 특정 부서의 평균 연봉보다 높은 연봉을 받는 직원 찾기
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > (
    SELECT AVG(Salary)
    FROM Employees
    WHERE DepartmentID = 3
);

 

2. 트랜잭션 

 

트랙잭션이란, 간단히 말해 데이터 베이스의 상태를 변경하기 위해 수행하는 작업(연산의 논리적)의 단위를 말한다.

만약, 작업이 중단되었을 경우 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면

Commit을 수행하는 논리적인 단위이다.

 

 데이터 베이스의 상태를 변경하기 위한 연산

더보기
  • ㄱ.  SELECT : 선택
  • ㄴ.  INSERT :  삽입
  • ㄷ.  UPDATE : 수정
  • ㄹ.  DELETE :  삭제

 

Rollback & Commit

더보기

Rollback -  하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터 베이스의 일관성을 꺠뜨렸을 떄,

트랜잭션의 일부가 정상적으로 처리되었더라고, 트랜잭션의 원자성을 구현하기 위해서는 , 이 트랜잭션이

행한 모든 연산을 취소하는 연산이다. Rollback 시에는, 해당 트랙잭션을 재시작하거나 폐기한다,

 

Commit - 하나의 트랜잭션 처리가 성공적으로 끝났고, 데이터 베이스가 다시 일관된 상태에 있을 떄,

이 트랜잭션이 행한 연산이 완료된 것을, 트랜잭션 관리가에게 알려주는 연산이다. (~여기서 부터 여기까지 쿼리들의 집합)

참고 - 여러 개의 쿼리가 실행 되는 경우에는, 이 쿼리들은 하나의 트랙잭션으로 묶이게 된다.

 

2. 트랜잭션의 특성 (ACID)

원자성 (Atomicity) : 트랜잭션에 포함된 작업은 전부 수행되거나, 전부 수행되지 않아야 한다. 원자성이란 앞에서 보았던 All or Nothing의 성질으로 트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다는 의미합니다. 트랜잭션이 중간에 끊기면 이후에 해당 트랜잭션의 어디서부터 이어 수행되어야 하는지 모르기 때문에 원자성이라는 성질을 지니게 되었다.

 

일관성 (Consistency) : 트랜잭션을 수행하기 전이나 후나 데이터 베이스는 항상 일관된 상태를 유지해야한다. 트랜잭션은 트랜잭션의 수행 전과 후에 일관된 상태를 유지해야 하고 이것을 일관성이라고 합니다. 예를 들어 어떤 테이블의 기본키와 같은 속성은 유지되어야 한다는 것 또는 A에서 B로 돈 이체를 할 때 A와 B계좌의 돈의 총합은 같아야한다는 것 등이 있습니다. 데이터베이스는 클라이언트들이 같은 데이터를 공유하는 것이 목적이므로 여러 트랜잭션이 동시에 수행되어야 합니다

 

격리성 (isolation) :  트랜잭션은 상호 간의 존재를 모르고 독립적으로 수행되어야 한다는 것이 고립성입니다. 고립성을 격리성이라고 얘기하기도 하는데 이를 유지하기 위해서는 여러 트랜잭션이 동시에 접근하는 데이터에 대한 제어가 필요합니다. 마지막으로 트랜잭션은 지속성이라는 성질을 지녀야합니다.  

 

지속성 (Durability) : 지속성은 트랜잭션의 성공 결과 값은 장애발생 후에도 변함없이 보관되어야 한다는 것으로 트랜잭션이 정상적으로 완료(Commit)된 경우에는 버퍼의 내용을 하드디스크(데이터베이스)에 확실히 기록하여야 하며, 부분 완료(Partial Commit)된 경우에는 작업을 취소(Aborted)하여야 합니다. 즉, 정상적으로 완료 혹은 부분완료된 데이터는 DBMS가 책임지고 데이터베이스에 기록하는 성질이 지속성이며 영속성이라고 표현하기도 합니다.