์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Database
- immutable
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฉ์ด์ ๋ณต์ฌ
- ์ ๊ทํ
- ๊น์๋ณต์ฌ
- ์๋ฃ๊ตฌ์กฐ
- transaction
- ํ๋ก์์๋ฒ
- mutable
- ์ด์งํ์
- binarySearch
- ๋ถ๋ณ๊ฐ์ฒด
- index
- ์กฐ์ธ
- ์ธ๋ฑ์ค
- java
- reverseํ๋ก์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- NoSQL
- proxy
- RDBMS
- acid
- ์์๋ณต์ฌ
- ERD
- forwardํ๋ก์
- Today
- Total
jacketList
[DataBase] ํธ๋์ญ์ (transaction) ๋ณธ๋ฌธ
๐ ํธ๋์ญ์ (Transaction)์ด๋?
ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์์ ์ ๋จ์ - > ์ฌ๋ฌ ๊ฐ์ ์ฟผ๋ฆฌ๋ค์ ํ๋๋ก ๋ฌถ๋ ๋จ์
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค.
Commit
- ์ง๊ธ๊น์ง ์์ ํ ๋ด์ฉ์ DB์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ
- transaction์ ์ข ๋ฃ
RollBack
- ์ง๊ธ๊น์ง ์์ ํ ๋ด์ฉ๋ค์ ์ ๋ถ ์ทจ์ํ๊ณ transaction ์ด์ ์ํ๋ก ๋๋๋ฆฐ๋ค.
- transaction ์ข ๋ฃ
AutoCommit
- ๊ฐ๊ฐ์ ์ฟผ๋ฆฌ์ ์๋์ผ๋ก transaction ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ๊ฐ๋
- ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณตํ๋ฉด ์๋์ผ๋ก commitํ๋ค.
- ์คํ ์ค์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด rollbackํ๋ค.
- MySQL์ default๋ก autocommit์ด ํ์ฑํ ๋์ด์๋ค.
- MySQL์์ Start Transaction์ ์คํํ๋ฉด ํ์ฑํ ๋์ด์๋ autocommit ์ off๋๋ค.
- commit/rollback๊ณผ ํจ๊ป transaction์ด ์ข ๋ฃ๋๋ฉด autocommit์ ํ์ฑํ ์ํ๋ก ๋์๊ฐ๋ค.
MySQL๋ก ๋ณด๋ ์์
START TRANSACTION;
UPDATE account SET balance = balance -100000 WHERE id = "a";
UPDATE account SET balance = balance +100000 WHERE id = "b";
COMMIT;
"a"์ "b"๋ ๊ฑฐ๋๋ฅผ ํ๊ณ ์๋ ์ํฉ์ด๋ค. "a"๋ "b"์๊ฒ 10๋ง์์ ๊ณ์ข์ด์ฒด ํ๋ค๊ณ ํ์ ๋
์์๊ฐ์ ๋๊ฐ์ง ๋์์ด ์คํ๋์ด์ผ ํ๋ค.
"a"์ ๊ณ์ข์์ 10๋ง์์ด ๋น ์ ธ๋๊ฐ๊ณ "b"์ ๊ณ์ข์์ 10๋ง์์ด ๋ค์ด์ค๋๋ก update์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค.
ํ์ง๋ง "a"์ ๊ณ์ข์์ 10๋ง์์ด ๋น ์ ธ๋๊ฐ๋ update์ฟผ๋ฆฌ๋ ์คํ๋์์ง๋ง "b"์๊ฒ 10๋ง์์ด ๋ค์ด์ค๋ update์ฟผ๋ฆฌ๊ฐ ์คํ๋์ง ์๋๋ค๋ฉด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ด ๋ณด์ฅ๋์ง ์๋๋ค.
์์๊ฐ์ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด '๊ฑฐ๋'๋ผ๋ ํ๋์ ์์ ๋จ์์์ ์ด๋ ํ์ชฝ์ update๋ฌธ๋ง ์คํ๋๊ฑฐ๋ ์ค๋ฅ๊ฐ ์๊ฒผ์ ๋ Rollback๊ธฐ๋ฅ์ผ๋ก Transaction ์ด์ ์ ์ํ๋ก ๋๋๋ฆฐ๋ค.
a์ b์ ๊ฑฐ๋
Transaction ์์
(a๊ฐ b์๊ฒ ๋ ์ด์ฒด - b๊ฐ a์๊ฒ ๋ ๋ฐ์) - ์ด๋ ์์ ์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด Rollback
commit - transaction์ข ๋ฃ
๐ก ACID ์์ฑ
์์์ฑ(Atomictiy)
- ํธ๋์ญ์ ๊ณผ ๊ด๋ จ๋ ์์ ์ด ๋ชจ๋ ์ํ๋๊ฑฐ๋ ์ํ๋์ง ์๊ฑฐ๋๋ฅผ ๋ณด์ฅํ๋ ํน์ง
- Commit ์ด์ ์๋ ๋์คํฌ์ ์ฐ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์๋ง ์ ์ฅํด ๋์๋ค๊ฐ ์ค๊ฐ์ ์คํจํ๋ฉด ๋์คํฌ์ ๋ฐ์ํ์ง ์๋ ๋ฐฉ์
์ผ๊ด์ฑ(Consistency)
- ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋ค์์ ์ํ์์๋ ํธ๋์ญ์ ์ด ์ผ์ด๋๊ธฐ ์ ์ ์ํฉ๊ฐ ๋์ผํ๊ฒ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅ
- constraints, trigger ๋ฑ์ ํตํด DB์ ์ ์๋ ๊ท์น์ transaction์ด ์๋ฐํ๋ค๋ฉด Rollbackํด์ผ ํ๋ค.
Ex) a - > b ์ด์ฒด
a๊ณ์ข : 100๋ง์
b๊ณ์ข : 10๋ง์
a -> b 110๋ง์ ์ด์ฒด
a๊ณ์ข : -10๋ง์
CREATE TABLE account (
...,
balance INT,
check (balance >= 0)
)
account ํ ์ด๋ธ์ ์์๊ฐ ๋ ์ ์๋ค๋ ์ ์ฝ์ฌํญ์ด ์๋ค. -> Rollback
๊ฒฉ๋ฆฌ์ฑ(Isolation)
- ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ด ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ํ
- ๋ณต์์ ๋ณ๋ ฌ ํธ๋์ญ์ ์ ์๋ก ๊ฒฉ๋ฆฌ๋์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋์๋์ด์ผ ํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ด์ผ ํ๋ค.
- isolation level์ ์ ๊ณต
Ex)
a -> b ๊ณ์ข ์ด์ฒด (Transaction)
a ๊ณ์ข ์กฐํ (read) - 100๋ง์
a ๊ณ์ข ์ด์ฒด (write) - 90 ๋ง์
b๊ณ์ข (Transaction)
b ๊ณ์ข ์กฐํ (read) - 10๋ง์
b๋ณธ์ธ ๊ณ์ข์ ๊ณ์ข์ด์ฒด(Transaction)
b ๊ณ์ข ์กฐํ (read) - 10๋ง์
b ๊ณ์ข ์ด์ฒด (write) - 40๋ง์
b ๊ณ์ข ๊ฐฑ์ (write) - 20๋ง์
์ง์์ฑ(Durability)
- ์ฑ๊ณต์ ์ผ๋ก ์ํ๋(commit) ํธ๋์ญ์ ์ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด์ผ ํ๋ค.
references
https://hello-judy-world.tistory.com/196
https://www.youtube.com/watch?v=sLJ8ypeHGlM
'Cs > DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ธ๋ฑ์ค(index) (0) | 2024.02.23 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์กฐ์ธ (0) | 2023.11.29 |
[DataBase][์๋ฃ๊ตฌ์กฐ]B tree, B+tree (1) | 2023.11.27 |
RDBMS์ NoSQL (5) | 2023.11.26 |
ERD์ค๊ณ์ ์ ๊ทํ (1) | 2023.11.25 |