TIL

TIL70: SQL

Deviloper😈 2022. 9. 15. 23:28

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

MySQLμ—μ„œ DB μƒνƒœλ₯Ό λ°”κΎΈλŠ” μž‘μ—…μ˜ μ΅œμ†Œ λ‹¨μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€. 

Transaction이 μ„€μ •λ˜λ©΄ DBMSλ‘œλΆ€ν„° μ„€μ •λœ Transaction μž‘μ—…μ— λŒ€ν•œ ACID 속성을 λΆ€μ—¬λ°›μŠ΅λ‹ˆλ‹€.

 

Atomicity (μ›μžμ„±) : All or Nothing -> λ‹€ μ§„ν–‰λ˜κ±°λ‚˜ μ•„μ˜ˆ μ•ˆλ˜κ²Œ ν•˜λŠ” 속성

Consistency (일관성)

Isolation (독립성)

Durability (μ˜μ†μ„±) : λλ‚œ κ²°κ³ΌλŠ” 영ꡬ적으둜 λ””μŠ€ν¬μ—!

 

commit -> Transaction ν™•μ •

rollback -> Transaction 되돌리기

νŠΈλžœμž­μ…˜μ€ μ™„μ „νžˆ μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λμ„ λ•Œλ§Œ 정상 μ’…λ£Œλ˜κΈ° λ•Œλ¬Έμ— 거래의 μ•ˆμ •μ„±μ„ 확보할 수 μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

 

 

DISTINCT

μ€‘λ³΅λœ 것을 ν•˜λ‚˜λ§Œ 남기고 싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

SELECT DISTINCT addr FROM usertbl;

 

 

 

집계 ν•¨μˆ˜ MAX(), MIN()

SELECT name, weight
	FROM usertbl
    WHERE weight = (SELECT MAX(weight) FROM usertbl)
    	OR weight = (SELECT MIN(weight)from usertbl);

 

 

HAVING

HAVING은 WHEREκ³Ό λΉ„μŠ·ν•œ κ°œλ…μœΌλ‘œ 쑰건을 μ œν•œν•˜λŠ” κ²ƒμ΄μ§€λ§Œ, 집계 ν•¨μˆ˜μ— λŒ€ν•΄ 쑰건을 μ œν•œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 

HAVING μ ˆμ€ κΌ­ GROUP BY절 λ‹€μŒμ— λ‚˜μ™€μ•Ό ν•©λ‹ˆλ‹€.

SELECT userName, SUM(price*amount)
	FROM buytbl
    GROUP BY userName
    HAVING SUM(price*amount) > 10000;

 

 

ROLLUP

GROUP BY절과 ν•¨κ»˜ WITH ROLLUP문을 μ‚¬μš©ν•˜λ©΄ 총합 λ˜λŠ” 쀑간 합계가 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

칼럼 λΉˆμΉΈμ„ μ±„μš°κΈ° μœ„ν•΄μ„œλŠ” IFNULL을 μ‚¬μš©ν•©λ‹ˆλ‹€.