πŸ“— CS

[DB] νŠΈλžœμž­μ…˜, SQL μ‘°μž‘μ–΄, JOIN, μ •κ·œν™”

jcowwk 2025. 1. 23. 21:09

νŠΈλžœμž­μ…˜, SQL μ‘°μž‘μ–΄, JOIN, μ •κ·œν™”


1. νŠΈλžœμž­μ…˜

2. SQL μ‘°μž‘μ–΄

3. JOIN

4. μ •κ·œν™”


1. νŠΈλžœμž­μ…˜(Transaction)

νŠΈλžœμž­μ…˜(Transaction)은 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° μœ„ν•΄μ„œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„μž…λ‹ˆλ‹€.

 

- νŠΈλžœμž­μ…˜ νŠΉμ§•

1. μ›μžμ„±(Atomicity)

νŠΈλžœμž­μ…˜μ΄ λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ 적용이 λ˜κ±°λ‚˜ λͺ¨λ‘ 적용이 λ˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€.

 

A κ³„μ’Œμ—μ„œ B κ³„μ’Œλ‘œ λˆμ„ μ΄μ²΄ν•˜λ €κ³  ν•  λ•Œ, A κ³„μ’Œμ—μ„œ κΈˆμ•‘μ„ μ°¨κ°ν•˜κ³  B κ³„μ’Œμ—μ„œ κΈˆμ•‘μ„ μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€.

A κ³„μ’Œμ—μ„œ κΈˆμ•‘μ„ μ°¨κ°ν•œ ν›„, B κ³„μ’Œμ— κΈˆμ•‘μ„ μΆ”κ°€ν•˜λŠ” 도쀑 μ‹œμŠ€ν…œ μž₯μ• κ°€ λ°œμƒν•˜λ©΄ A κ³„μ’ŒλŠ” μ°¨κ°λ˜μ—ˆμ§€λ§Œ B κ³„μ’ŒλŠ” κΈˆμ•‘μ΄ μΆ”κ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ›μžμ„±μ— μ˜ν•΄μ„œ 두 μž‘μ—…μ΄ λͺ¨λ‘ μ™„λ£Œλ˜κ±°λ‚˜ λͺ¨λ‘ μ™„λ£Œλ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

 

2. 일관성(Consistency)

νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 처리 κ²°κ³Όκ°€ 항상 일관성 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κΈ° μ „κ³Ό λλ‚œ 후에 λ°μ΄ν„°λ² μ΄μŠ€μ— μ„€μ •ν•œ κ·œμΉ™μ΄λ‚˜ μ œμ•½μ„ 항상 μ§€μΌœμ•Όν•©λ‹ˆλ‹€.

 

3. 독립성(Isolation)

ν•œ νŠΈλžœμž­μ…˜μ΄ 싀행쀑일 λ•Œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μˆ˜ν–‰ κ²°κ³Όλ₯Ό μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

A κ³„μ’Œμ—μ„œ B κ³„μ’Œλ‘œ λˆμ„ μ΄μ²΄ν•˜λ €κ³  ν•  λ•Œ, A κ³„μ’Œμ—μ„œ κΈˆμ•‘μ„ μ°¨κ°ν•˜κ³  B κ³„μ’Œμ—μ„œ κΈˆμ•‘μ„ μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ A의 이체가 μ™„λ£Œλ˜κΈ° 전에 A의 κ³„μ’Œμ—μ„œ κΈˆμ•‘μ„ μ°¨κ°ν•˜λ©΄ A와 B의 μž‘μ—…μ΄ μ„œλ‘œ 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€. 독립성에 μ˜ν•΄ 각 νŠΈλžœμž­μ…˜μ€ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 영ν–₯을 λ°›μ§€ μ•Šλ„λ‘ κ²©λ¦¬λ˜μ–΄ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

4. 지속성/μ˜μ†μ„±(Durability)

νŠΈλžœμž­μ…˜μ€ 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

μ‚¬μš©μžκ°€ μ›Ή μ‚¬μ΄νŠΈμ—μ„œ μƒν’ˆμ„ κ΅¬μž…ν•˜κ³  결제λ₯Ό μ™„λ£Œν•œ 후에 μ‹œμŠ€ν…œμ— λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ μ„œλ²„κ°€ λ‹€μš΄λ  λ•Œ, 지속성/μ˜μ†μ„±μ— μ˜ν•΄ 결제 μ •λ³΄λ‚˜ μ£Όλ¬Έ λ‚΄μš©μ΄ μ†μ‹€λ˜μ§€ μ•Šκ³  μ‹œμŠ€ν…œμ— 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

2. SQL μ‘°μž‘μ–΄

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό λ‹€λ£° λ•Œ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄κ°€ SQL μž…λ‹ˆλ‹€.

SQL의 μ’…λ₯˜λŠ” 크게 DDL, DML, DCL 3κ°€μ§€κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

- DDL(Data Definition Language): 데이터 μ •μ˜ μ–Έμ–΄

1. CREATE

μƒˆλ‘œμš΄ ν…Œμ΄λΈ”, λ·°, λ°μ΄ν„°λ² μ΄μŠ€ 등을 생성할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

CREATE TABLE ν…Œμ΄λΈ”λͺ… (속성λͺ… νƒ€μž…, 속성λͺ… νƒ€μž…);

 

2. ALTER

기쑴의 λ°μ΄ν„°λ² μ΄μŠ€ 객체의 ꡬ쑰λ₯Ό λ³€κ²½ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

ALTER TABLE ν…Œμ΄λΈ”λͺ… ADD 속성λͺ… νƒ€μž…λͺ…;

 

ꡬ쑰 λ³€κ²½ν•  λ•Œ ADD, MODIFY, CHANGE, RENAME, DROP λ“±μ˜ λͺ…λ Ήμ–΄κ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

ADD: 속성 μΆ”κ°€

MODIFY: 컬럼의 데이터 νƒ€μž… λ³€κ²½

 

3. DROP

ν…Œμ΄λΈ”μ΄λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

DROP TABLE ν…Œμ΄λΈ”λͺ…;

 

4. TRUNCATE

ν…Œμ΄λΈ”μ˜ λ°μ΄ν„°λŠ” μ‚­μ œν•˜μ§€λ§Œ ν…Œμ΄λΈ” κ΅¬μ‘°λŠ” κ·ΈλŒ€λ‘œ λ‚¨κ²¨λ†“μŠ΅λ‹ˆλ‹€.

TRUNCATE TABLE ν…Œμ΄λΈ”λͺ…;

 

- DML(Data manipulation Language): 데이터 μ‘°μž‘ μ–Έμ–΄

1. SELECT

μ›ν•˜λŠ” 데이터λ₯Ό κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

SELECT 속성λͺ… FROM ν…Œμ΄λΈ”λͺ…;

 

2. INSERT

ν…Œμ΄λΈ”μ— 데이터λ₯Ό μ‚½μž…ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

INSERT INTO ν…Œμ΄λΈ”λͺ… (속성λͺ…, 속성λͺ…) VALUES (데이터, 데이터);

 

3. UPDATE

기쑴의 데이터λ₯Ό μˆ˜μ •ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

UPDATE ν…Œμ΄λΈ”λͺ… SET 속성λͺ… = 데이터;

 

4. DELETE

기쑴의 데이터λ₯Ό μ‚­μ œν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

DELETE FROM ν…Œμ΄λΈ”λͺ… WHERE 속성λͺ… = 데이터;

 

5. TRUNCATE와 차이점

DELETEλŠ” νŠΉμ • ν–‰ λ˜λŠ” 전체 데이터λ₯Ό μ‚­μ œν•  수 있고, TRUNCATEλŠ” ν…Œμ΄λΈ”μ˜ 전체 데이터 μ‚­μ œλ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

DELETE ν–ˆμ„ 경우 COMMIT 전이면 ROLLBACK이 κ°€λŠ₯ν•˜κ³ , TRUNCATEλŠ” ROLLBACK이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. (일뢀 DBMSμ—μ„œλŠ” κ°€λŠ₯)

 

- DCL(Data Control Language): 데이터 μ œμ–΄ μ–Έμ–΄

1. GRANT

νŠΉμ • μ‚¬μš©μžμ—κ²Œ λ°μ΄ν„°λ² μ΄μŠ€ 객체에 λŒ€ν•œ κΆŒν•œμ„ λΆ€μ—¬ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

GRANT λͺ…λ Ήμ–΄ ON ν…Œμ΄λΈ”λͺ… TO μ‚¬μš©μžλͺ…;

 

2. REVOKE

νŠΉμ • μ‚¬μš©μžμ—κ²Œ λ°μ΄ν„°λ² μ΄μŠ€ 객체에 λŒ€ν•œ κΆŒν•œμ„ νšŒμˆ˜ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

REVOKE λͺ…λ Ήμ–΄ ON ν…Œμ΄λΈ” FROM μ‚¬μš©μžλͺ…;

 

- TCL(Transaction Control Language): νŠΈλžœμž­μ…˜ μ œμ–΄ μ–Έμ–΄

1. COMMIT

νŠΈλžœμž­μ…˜μ„ μ™„λ£Œν•˜κ³  변경사항을 영ꡬ적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.

 

2. ROLLBACK

νŠΈλžœμž­μ…˜μ„ μ·¨μ†Œν•˜κ³  λ³€κ²½ 사항을 μ›λž˜λŒ€λ‘œ λ˜λŒλ¦½λ‹ˆλ‹€.

 

3. SAVEPOINT

νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ νŠΉμ • 지점을 μ„€μ •ν•˜μ—¬ κ·Έ μ§€μ μœΌλ‘œ 되돌릴 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

SAVEPOINT μ„Έμ΄λΈŒν¬μΈνŠΈλͺ…;

 

3. JOIN

두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜μ—¬ 데이터λ₯Ό μ‘°νšŒν•  λ•Œ μ‚¬μš©ν•˜λŠ” SQL λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

 

- INNER JOIN(λ‚΄λΆ€ 쑰인)

두 ν…Œμ΄λΈ”μ—μ„œ μΌμΉ˜ν•˜λŠ” λ°μ΄ν„°λ§Œ μ‘°νšŒν•©λ‹ˆλ‹€.

 

- LEFT JOIN(μ™Όμͺ½ μ™ΈλΆ€ 쑰인)

μ™Όμͺ½ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  데이터λ₯Ό κ°€μ Έμ˜€κ³ , 였λ₯Έμͺ½ ν…Œμ΄λΈ”μ— μΌμΉ˜ν•˜λŠ” 데이터가 있으면 ν•¨κ»˜ 좜λ ₯ν•©λ‹ˆλ‹€.

μΌμΉ˜ν•˜λŠ” 데이터가 μ—†λŠ” 경우 NULL이 λ“€μ–΄κ°‘λ‹ˆλ‹€.

 

- RIGHT JOIN(였λ₯Έμͺ½ μ™ΈλΆ€ 쑰인)

였λ₯Έμͺ½ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  데이터λ₯Ό κ°€μ Έμ˜€κ³ , μ™Όμͺ½ ν…Œμ΄λΈ”μ— μΌμΉ˜ν•˜λŠ” 데이터가 있으면 ν•¨κ»˜ 좜λ ₯ν•©λ‹ˆλ‹€.

μΌμΉ˜ν•˜λŠ” 데이터가 μ—†λŠ” 경우 NULL이 λ“€μ–΄κ°‘λ‹ˆλ‹€.

 

- FULL JOIN(μ™„μ „ μ™ΈλΆ€ 쑰인)

μ™Όμͺ½ ν…Œμ΄λΈ”κ³Ό 였λ₯Έμͺ½ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  데이터λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

μΌμΉ˜ν•˜λŠ” 데이터가 μ—†λŠ” 경우 NULL이 λ“€μ–΄κ°‘λ‹ˆλ‹€.

 

4. μ •κ·œν™”(Normalization)

λ°μ΄ν„°λ² μ΄μŠ€ 섀계 κ³Όμ •μ—μ„œ λ°μ΄ν„°μ˜ 쀑볡을 쀄이고, 데이터 무결성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

 

- 제1μ •κ·œν™”

각 컬럼의 값이 더 이상 λ‚˜λˆŒ 수 μ—†λŠ” μ›μžκ°’μ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€.

ν•œ μ»¬λŸΌμ— ν•œ μ†μ„±μ˜ κ°’λ§Œ λ“€μ–΄κ°‘λ‹ˆλ‹€.

 

- 제2μ •κ·œν™”

κΈ°λ³Έ ν‚€μ˜ 일뢀가 μ•„λ‹Œ 속성은 κΈ°λ³Έ ν‚€ 전체에 μ’…μ†λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

- 제3μ •κ·œν™”

κΈ°λ³Έ 킀에 직접 μ’…μ†λ˜μ§€ μ•ŠλŠ” 속성을 μ œκ±°ν•©λ‹ˆλ‹€.

 

- 제4μ •κ·œν™”(BCNF)

λͺ¨λ“  κ²°μ •μžλŠ” 후보 ν‚€μ—¬μ•Ό ν•©λ‹ˆλ‹€.

 

- 제5μ •κ·œν™”

쑰인을 μˆ˜ν–‰ν–ˆμ„ λ•Œ 정보 손싀이 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€.


μ°Έκ³  μ‚¬μ΄νŠΈ

 

νŠΈλžœμž­μ…˜(Transaction)μ΄λž€?

νŠΈλžœμž­μ…˜μ΄λž€? νŠΈλžœμž­μ…˜(Transaction μ΄ν•˜ νŠΈλžœμž­μ…˜)μ΄λž€, λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° ν•΄μ„œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„λ₯Ό λœ»ν•œλ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚¨λ‹€λŠ” 것은 무얼 μ˜λ―Έν•˜λŠ” 것일

mommoo.tistory.com

 

λ¬Έμ œκ°€ 있으면 λŒ“κΈ€ λ‚¨κ²¨μ£Όμ„Έμš” !

ν”Όλ“œλ°±μ€ μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€ <3