트랜잭션이란 업무 실행의 단위, 논리적 명령 단위, 개념상의 단위이다.
고객이 우리에게 계좌이체 서비를 원한다고 한다면 우리는 이를 구체적으로 프로그래밍한다.
만약 A가 B에게 입금을 한다면 두번의 UPDATE문이 필요할 것이다.
1 . A의 돈을 마이너스. UPDATE
2. B의 돈을 증가. UPDATE
그런데 만약 A의 돈은 안 줄었는데 B의 돈만 증가했다면? 위의 서비스가 실행되어서는 안된다.
그래서 우리는 1,2의 과정을 하나의 트랜잭션으로 묶는다.
트랜잭션으로 묶이면 만약 1번에서 오류가 됐다면 2번에서 성공한다고 해도 둘은 하나로 묶여있는 서비스이므로
두 문장 모두 실행되지 않는다.
이제 DB의 관점에서 우리는 위와 같은 일을 방지하기 위해 하나의 트랜잭션을 일단. 임시 DB에서 수행한다.
그리고 그때까지 오류가 없다면, 본래의 DB에 임시의 DB에서 수정한 내용을 적용시켜주는 것이다.
그런데, 만약 찬영이와 상운이가 같은 DB를 쓰는데, 찬영이가 DB작업 수행 중에 상운이도 업데이트 할 것이 있다며 자기도 수행하겠다고 하면 서비스가 망가질 수 있다. 그래서
COMMIT 과 ROLLBACK이 필요하다.
DB를 수정하고 COMMIT, ROLLBACK하지 않으면 어떤 명령문을 수행했더라도 DB에는 적용되지 않는다.
또한 COMMIT과 ROLLBACK을 아직 하지 않은 상태를 잠갔다.(LOCK 🔒)이라고 한다.
찬영이가 만약 아직 COMMIT이나 ROLLBACK을 하지 않고, 쿼리 수행 중이라면 상운이 쪽에서는
해당 DB를 볼 수 없다. 즉 쿼리문을 수행해도 실행되지 않는다.
이제 다시 찬영이가 커밋이나, 롤백을 통해 UNLOCK을 하면 그때서야 상운이가 디비에 접근할 수 있다.
아래는 간단한 + 연산자. 문자를 연결할 때 '||' 로 쓴다.
즉 아래의 NAME || '(' || ID || ')' 는 NAME(ID) 형태이다.
'oracle' 카테고리의 다른 글
오라클7 (JOIN2) (0) | 2021.03.20 |
---|---|
오라클6( JOIN 1) (0) | 2021.03.19 |
오라클4(함수) (0) | 2021.03.19 |
오라클3 (연산자) (0) | 2021.03.16 |
오라클 1 (0) | 2021.03.15 |