πŸ˜—
SQL Guide
  • πŸ˜€SQL μ „λ¬Έκ°€ κ°€μ΄λ“œμ˜ κ°€μ΄λ“œ
  • 😦과λͺ©1 데이터λͺ¨λΈμ˜ 이해
    • ⭐제1μž₯ 데이터 λͺ¨λΈλ§μ˜ 이해
      • 🌠1-1-1. 데이터 λͺ¨λΈμ˜ 이해
      • 🌠1-1-2. μ—”ν„°ν‹°(Entity)
      • 🌠1-1-3. 속성(Attribute)
      • 🌠1-1-4. 관계(Relationship)
      • 🌠1-1-5. μ‹λ³„μž
    • ⭐제2μž₯ 데이터 λͺ¨λΈκ³Ό SQL
      • 🌠1-2-1. μ •κ·œν™”
      • 🌠1-2-2. 관계와 쑰인의 이해
      • 🌠1-2-3. λͺ¨λΈμ΄ ν‘œν˜„ν•˜λŠ” νŠΈλžœμž­μ…˜μ˜ 이해
      • 🌠1-2-4. Null μ†μ„±μ˜ 이해
      • 🌠1-2-5. λ³Έμ§ˆμ‹λ³„μž vs. μΈμ‘°μ‹λ³„μž
  • 😧과λͺ©2. SQL κΈ°λ³Έκ³Ό ν™œμš©
    • ⭐제1μž₯ SQL κΈ°λ³Έ
      • 🌠2-1-1. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ κ°œμš”
      • 🌠2-1-2. SELECTλ¬Έ
      • 🌠2-1-3. ν•¨μˆ˜(FUNCTION)
      • 🌠2-1-4. WHERE 절
      • 🌠2-1-5. GROUP BY, HAVING 절
      • 🌠2-1-6. ORDER BY 절
      • 🌠2-1-7. 쑰인
      • 🌠2-1-8. ν‘œμ€€ 쑰인
    • ⭐제2μž₯ SQL ν™œμš©
      • 🌠2-2-1. μ„œλΈŒ 쿼리
      • 🌠2-2-2. μ§‘ν•© μ—°μ‚°μž
      • 🌠2-2-3. κ·Έλ£Ή ν•¨μˆ˜
      • 🌠2-2-4. μœˆλ„μš° ν•¨μˆ˜
      • 🌠2-2-5. Top N 쿼리
      • 🌠2-2-6. κ³„μΈ΅ν˜• μ§ˆμ˜μ™€ μ…€ν”„ 쑰인
      • 🌠2-2-7. PIVOT 절과 UNPIVOT 절
      • 🌠2-2-8. μ •κ·œ ν‘œν˜„μ‹
    • ⭐제3μž₯ 관리 ꡬ문
      • 🌠2-3-1. DML
      • 🌠2-3-2. TCL
      • 🌠2-3-3. DDL
      • 🌠2-3-4. DCL
  • 😨과λͺ©3. SQL κ³ κΈ‰ ν™œμš© 및 νŠœλ‹
    • ⭐제1μž₯ SQL μˆ˜ν–‰ ꡬ쑰
      • 🌠3-1-1. λ°μ΄ν„°λ² μ΄μŠ€ μ•„ν‚€ν…μ²˜
      • 🌠3-1-2. SQL 처리 κ³Όμ •
      • 🌠3-1-3. λ°μ΄ν„°λ² μ΄μŠ€ I/O λ©”μ»€λ‹ˆμ¦˜
    • ⭐제2μž₯ SQL 뢄석 도ꡬ
      • 🌠3-2-1. μ˜ˆμƒ μ‹€ν–‰κ³„νš
      • 🌠3-2-2. SQL 트레이슀
      • 🌠3-2-3. 응닡 μ‹œκ°„ 뢄석
    • ⭐제3μž₯ 인덱슀 νŠœλ‹
      • 🌠3-3-1. 인덱슀 κΈ°λ³Έ 원리
      • 🌠3-3-2. ν…Œμ΄λΈ” μ•‘μ„ΈμŠ€ μ΅œμ†Œν™”
      • 🌠3-3-3. 인덱슀 μŠ€μΊ” νš¨μœ¨ν™”
      • 🌠3-3-4. 인덱슀 섀계
    • ⭐제4μž₯ 쑰인 νŠœλ‹
      • 🌠3-4-1. NL 쑰인
      • 🌠3-4-2. μ†ŒνŠΈ λ¨Έμ§€ 쑰인
      • 🌠3-4-3. ν•΄μ‹œ 쑰인
      • 🌠3-4-4. 슀칼라 μ„œλΈŒμΏΌλ¦¬
      • 🌠3-4-5. κ³ κΈ‰ 쑰인 기법
    • ⭐제5μž₯ SQL μ˜΅ν‹°λ§ˆμ΄μ €
      • 🌠3-5-1. SQL μ˜΅ν‹°λ§ˆμ΄μ§• 원리
      • 🌠3-5-2. SQL 곡유 및 μž¬μ‚¬μš©
      • 🌠3-5-3. 쿼리 λ³€ν™˜
    • ⭐제6μž₯ κ³ κΈ‰ SQL νŠœλ‹
      • 🌠3-6-1. μ†ŒνŠΈ νŠœλ‹
      • 🌠3-6-2. DML νŠœλ‹
      • 🌠3-6-3. λ°μ΄ν„°λ² μ΄μŠ€ Call μ΅œμ†Œν™”
      • 🌠3-6-4. νŒŒν‹°μ…”λ‹
      • 🌠3-6-5. λŒ€μš©λŸ‰ 배치 ν”„λ‘œκ·Έλž¨ νŠœλ‹
      • 🌠3-6-6. κ³ κΈ‰ SQL ν™œμš©
    • ⭐제7μž₯ Lockκ³Ό νŠΈλžœμž­μ…˜ λ™μ‹œμ„± μ œμ–΄
      • 🌠3-7-1. Lock
      • 🌠3-7-2. νŠΈλžœμž­μ…˜
      • 🌠3-7-3. λ™μ‹œμ„± μ œμ–΄
Powered by GitBook
On this page
  • κ³Όλͺ©2. SQL κΈ°λ³Έκ³Ό ν™œμš©
  • 제3μž₯ 관리 ꡬ문
  • 제2절 TCL
  • 1. νŠΈλžœμž­μ…˜ κ°œμš”
  • 2. COMMIT
  • 3. ROLLBACK
  • 4. SAVEPOINT

Was this helpful?

  1. κ³Όλͺ©2. SQL κΈ°λ³Έκ³Ό ν™œμš©
  2. 제3μž₯ 관리 ꡬ문

2-3-2. TCL

Previous2-3-1. DMLNext2-3-3. DDL

Last updated 3 years ago

Was this helpful?

κ³Όλͺ©2. SQL κΈ°λ³Έκ³Ό ν™œμš©

제3μž₯ 관리 ꡬ문

제2절 TCL

1. νŠΈλžœμž­μ…˜ κ°œμš”

νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 논리적 μ—°μ‚°λ‹¨μœ„μ΄λ‹€. νŠΈλžœμž­μ…˜(TRANSACTION)μ΄λž€ λ°€μ ‘νžˆ κ΄€λ ¨λ˜μ–΄ 뢄리될 수 μ—†λŠ” ν•œ 개 μ΄μƒμ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ‘°μž‘μ„ 가리킨닀. ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ—λŠ” ν•˜λ‚˜ μ΄μƒμ˜ SQL λ¬Έμž₯이 ν¬ν•¨λœλ‹€. νŠΈλžœμž­μ…˜μ€ λΆ„ν• ν•  수 μ—†λŠ” μ΅œμ†Œμ˜ λ‹¨μœ„μ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ „λΆ€ μ μš©ν•˜κ±°λ‚˜ μ „λΆ€ μ·¨μ†Œν•œλ‹€. 즉 TRANSACTION은 ALL OR NOTHING의 κ°œλ…μΈ 것이닀. μ€ν–‰μ—μ„œμ˜ κ³„μ’Œμ΄μ²΄ 상황을 μ—°μƒν•˜λ©΄ νŠΈλžœμž­μ…˜μ„ μ΄ν•΄ν•˜λŠ”λ° 도움이 λœλ‹€. κ³„μ’Œμ΄μ²΄λŠ” μ΅œμ†Œν•œ 두 κ°€μ§€ μ΄μƒμ˜ μž‘μ—…μœΌλ‘œ 이루어져 μžˆλ‹€. μš°μ„  μžμ‹ μ˜ κ³„μ’Œμ—μ„œ μž”μ•‘μ„ ν™•μΈν•˜κ³  이체할 κΈˆμ•‘μ„ μΈμΆœν•œ λ‹€μŒ λ‚˜λ¨Έμ§€ κΈˆμ•‘μ„ μ €μž₯ν•œλ‹€. 그리고 이체할 κ³„μ’Œλ₯Ό ν™•μΈν•˜κ³  μ•žμ—μ„œ μΈμΆœν•œ κΈˆμ•‘μ„ λ”ν•œ λ‹€μŒμ— μ €μž₯ν•˜λ©΄ κ³„μ’Œμ΄μ²΄κ°€ μ„±κ³΅ν•œλ‹€.

κ³„μ’Œμ΄μ²΄ 사둀

  • STEP1. 100번 κ³„μ’Œμ˜ μž”μ•‘μ—μ„œ 10,000원을 λΊ€λ‹€.

  • STEP2. 200번 κ³„μ’Œμ˜ μž”μ•‘μ— 10,000원을 λ”ν•œλ‹€.

κ³„μ’Œμ΄μ²΄λΌλŠ” μž‘μ—… λ‹¨μœ„λŠ” 이런 두 개의 μ—…λ°μ΄νŠΈκ°€ λͺ¨λ‘ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ μ’…λ£Œλœλ‹€. λ‘˜ 쀑 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•  경우 κ³„μ’Œμ΄μ²΄λŠ” μ›λž˜μ˜ κΈˆμ•‘μ„ μœ μ§€ν•˜κ³  μžˆμ–΄μ•Όλ§Œ ν•œλ‹€. λ§Œμ•½ μ–΄λ– ν•œ μž₯애에 μ˜ν•΄ μ–΄λŠ μͺ½μ΄λ“  ν•œ μͺ½λ§Œ μ‹€ν–‰ν–ˆμ„ 경우, μ΄μ²΄ν•œ κΈˆμ•‘μ€ μ–΄λ””λ‘œ μ¦λ°œν•΄ λ²„λ Έκ±°λ‚˜ λ§ˆμŒλŒ€λ‘œ μ¦κ°€ν•˜κ²Œ λœλ‹€. λ‹Ήμ—°νžˆ 그런 일이 μžˆμ–΄μ„œλŠ” μ•ˆ λ˜λ―€λ‘œ μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” μˆ˜μ •μ„ μ·¨μ†Œν•˜μ—¬ 원 μƒνƒœλ‘œ λ˜λŒλ €μ•Ό ν•œλ‹€. 이런 κ³„μ’Œμ΄μ²΄ 같은 ν•˜λ‚˜μ˜ 논리적인 μž‘μ—… λ‹¨μœ„λ₯Ό κ΅¬μ„±ν•˜λŠ” 세뢀적인 μ—°μ‚°λ“€μ˜ 집합을 νŠΈλžœμž­μ…˜μ΄λΌ ν•œλ‹€. 이런 κ΄€μ μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ νŠΈλžœμž­μ…˜μ˜ μ§‘ν•©μœΌλ‘œ μ •μ˜ν•  μˆ˜λ„ μžˆλ‹€. μ˜¬λ°”λ₯΄κ²Œ 반영된 데이터λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜μ‹œν‚€λŠ” 것을 컀밋(COMMIT), νŠΈλžœμž­μ…˜ μ‹œμž‘ μ΄μ „μ˜ μƒνƒœλ‘œ λ˜λŒλ¦¬λŠ” 것을 λ‘€λ°±(ROLLBACK)이라고 ν•˜λ©°, μ €μž₯점(SAVEPOINT) κΈ°λŠ₯κ³Ό ν•¨κ»˜ 3κ°€μ§€ λͺ…λ Ήμ–΄λ₯Ό νŠΈλžœμž­μ…˜μ„ μ½˜νŠΈλ‘€ν•˜λŠ” TCL(TRANSACTION CONTROL LANGUAGE)둜 λΆ„λ₯˜ν•œλ‹€. νŠΈλžœμž­μ…˜μ˜ λŒ€μƒμ΄ λ˜λŠ” SQL문은 UPDATE, INSERT, DELETE λ“± 데이터λ₯Ό μˆ˜μ •ν•˜λŠ” DML 문이닀. SELECT λ¬Έμž₯은 직접적인 νŠΈλžœμž­μ…˜μ˜ λŒ€μƒμ΄ μ•„λ‹ˆμ§€λ§Œ, SELECT FOR UPDATE λ“± 배타적 LOCK을 μš”κ΅¬ν•˜λŠ” SELECT λ¬Έμž₯은 νŠΈλžœμž­μ…˜μ˜ λŒ€μƒμ΄ 될 수 μžˆλ‹€. νŠΈλžœμž­μ…˜μ˜ νŠΉμ„±μ„ μ‚΄νŽ΄λ³΄λ©΄ [ν‘œ β…‘-1-14]와 κ°™λ‹€.

κ³„μ’Œμ΄μ²΄λŠ” ν•œ κ³„μ’Œμ—μ„œ ν˜„κΈˆμ΄ 인좜된 후에 λ‹€λ₯Έ κ³„μ’Œλ‘œ μž…κΈˆμ΄ λ˜λŠ”λ°. ν˜„κΈˆμ΄ 인좜되기 전에 λ‹€λ₯Έ κ³„μ’Œμ— μž…κΈˆμ΄ λ˜λŠ” 것은 문제λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€. 그리고 이체가 κ²°μ •λ˜κΈ° μ „κΉŒμ§€λŠ” λ‹€λ₯Έ μ‚¬λžŒμ΄ 이 κ³„μ’Œμ˜ 정보λ₯Ό λ³€κ²½ν•  수 μ—†λ‹€. 이것을 보톡 문에 μžλ¬Όμ‡ λ₯Ό μ±„μš°λ“―μ΄ ν•œλ‹€κ³  ν•˜μ—¬ 잠금(LOCKING)이라고 ν‘œν˜„ν•œλ‹€. νŠΈλžœμž­μ…˜μ˜ νŠΉμ„±(특히 μ›μžμ„±)을 μΆ©μ‘±ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ‹€μ–‘ν•œ 레벨의 잠금 κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆλŠ”λ°, μž κΈˆμ€ 기본적으둜 νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰ν•˜λŠ” λ™μ•ˆ νŠΉμ • 데이터에 λŒ€ν•΄μ„œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 μ œν•œν•˜λŠ” 기법이닀. 잠금이 κ±Έλ¦° λ°μ΄ν„°λŠ” μž κΈˆμ„ μ‹€ν–‰ν•œ νŠΈλžœμž­μ…˜λ§Œ λ…μ μ μœΌλ‘œ μ ‘κ·Όν•  수 있고 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μœΌλ‘œλΆ€ν„° κ°„μ„­μ΄λ‚˜ λ°©ν•΄λ₯Ό λ°›μ§€ μ•ŠλŠ” 것이 보μž₯λœλ‹€. 그리고 잠금이 κ±Έλ¦° λ°μ΄ν„°λŠ” μž κΈˆμ„ μˆ˜ν–‰ν•œ νŠΈλžœμž­μ…˜λ§Œμ΄ ν•΄μ œν•  수 μžˆλ‹€.

2. COMMIT

μž…λ ₯ν•œ μžλ£Œλ‚˜ μˆ˜μ •ν•œ μžλ£Œμ— λŒ€ν•΄μ„œ λ˜λŠ” μ‚­μ œν•œ μžλ£Œμ— λŒ€ν•΄μ„œ μ „ν˜€ λ¬Έμ œκ°€ μ—†λ‹€κ³  νŒλ‹¨λ˜μ—ˆμ„ 경우 COMMIT λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ νŠΈλžœμž­μ…˜μ„ μ™„λ£Œν•  수 μžˆλ‹€. COMMITμ΄λ‚˜ ROLLBACK μ΄μ „μ˜ 데이터 μƒνƒœλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • 단지 λ©”λͺ¨λ¦¬ BUFFERμ—λ§Œ 영ν–₯을 λ°›μ•˜κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°μ˜ λ³€κ²½ 이전 μƒνƒœλ‘œ 볡ꡬ κ°€λŠ₯ν•˜λ‹€.

  • ν˜„μž¬ μ‚¬μš©μžλŠ” SELECT λ¬Έμž₯으둜 κ²°κ³Όλ₯Ό 확인 κ°€λŠ₯ν•˜λ‹€.

  • λ‹€λ₯Έ μ‚¬μš©μžλŠ” ν˜„μž¬ μ‚¬μš©μžκ°€ μˆ˜ν–‰ν•œ λͺ…λ Ήμ˜ κ²°κ³Όλ₯Ό λ³Ό 수 μ—†λ‹€.

  • λ³€κ²½λœ 행은 잠금(LOCKING)이 μ„€μ •λ˜μ–΄μ„œ λ‹€λ₯Έ μ‚¬μš©μžκ°€ λ³€κ²½ν•  수 μ—†λ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•˜κ³  COMMIT을 μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1997035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

COMMIT; 컀밋이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•˜κ³  COMMIT을 μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

UPDATE PLAYER SET HEIGHT = 100; 

480개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

COMMIT; 컀밋이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μ‚­μ œν•˜κ³  COMMIT을 μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

DELETE FROM PLAYER; 

480개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

COMMIT; 컀밋이 μ™„λ£Œλ˜μ—ˆλ‹€.

COMMIT λͺ…λ Ήμ–΄λŠ” 이처럼 INSERT λ¬Έμž₯, UPDATE λ¬Έμž₯, DELETE λ¬Έμž₯을 μ‚¬μš©ν•œ 후에 이런 λ³€κ²½ μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμŒμ„ λ°μ΄ν„°λ² μ΄μŠ€μ— μ•Œλ € μ£ΌκΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. COMMIT μ΄ν›„μ˜ 데이터 μƒνƒœλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • 데이터에 λŒ€ν•œ λ³€κ²½ 사항이 λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜λœλ‹€.

  • 이전 λ°μ΄ν„°λŠ” μ˜μ›νžˆ μžƒμ–΄λ²„λ¦¬κ²Œ λœλ‹€.

  • λͺ¨λ“  μ‚¬μš©μžλŠ” κ²°κ³Όλ₯Ό λ³Ό 수 μžˆλ‹€.

  • κ΄€λ ¨λœ 행에 λŒ€ν•œ 잠금(LOCKING)이 풀리고, λ‹€λ₯Έ μ‚¬μš©μžλ“€μ΄ 행을 μ‘°μž‘ν•  수 있게 λœλ‹€.

  • SQL Server의 COMMIT

Oracle은 DML을 μ‹€ν–‰ν•˜λŠ” 경우 DBMSκ°€ νŠΈλžœμž­μ…˜μ„ λ‚΄λΆ€μ μœΌλ‘œ μ‹€ν–‰ν•˜λ©° DML λ¬Έμž₯ μˆ˜ν–‰ ν›„ μ‚¬μš©μžκ°€ μž„μ˜λ‘œ COMMIT ν˜Ήμ€ ROLLBACK을 μˆ˜ν–‰ν•΄ μ£Όμ–΄μ•Ό νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλœλ‹€. (일뢀 νˆ΄μ—μ„œλŠ” AUTO COMMIT을 μ˜΅μ…˜μœΌλ‘œ 선택할 수 μžˆλ‹€.) ν•˜μ§€λ§Œ, SQL ServerλŠ” 기본적으둜 AUTO COMMIT λͺ¨λ“œμ΄κΈ° λ•Œλ¬Έμ— DML μˆ˜ν–‰ ν›„ μ‚¬μš©μžκ°€ COMMITμ΄λ‚˜ ROLLBACK을 μ²˜λ¦¬ν•  ν•„μš”κ°€ μ—†λ‹€. DML ꡬ문이 성곡이면 μžλ™μœΌλ‘œ COMMIT이 되고 였λ₯˜κ°€ λ°œμƒν•  경우 μžλ™μœΌλ‘œ ROLLBACK μ²˜λ¦¬λœλ‹€. μœ„μ˜ 예제λ₯Ό SQL Server용으둜 λ³€κ²½ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•œλ‹€.

[예제] SQL Server

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1997035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•œλ‹€.

[예제] SQL Server

UPDATE PLAYER SET HEIGHT = 100; 

480개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μ‚­μ œν•œλ‹€.

[예제] SQL Server

DELETE FROM PLAYER; 

480개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

SQL Serverμ—μ„œμ˜ νŠΈλžœμž­μ…˜μ€ 기본적으둜 3κ°€μ§€ λ°©μ‹μœΌλ‘œ 이루어진닀.

1) AUTO COMMIT

SQL Server의 κΈ°λ³Έ 방식이며, DML, DDL을 μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€ DBMSκ°€ νŠΈλžœμž­μ…˜μ„ μ»¨νŠΈλ‘€ν•˜λŠ” 방식이닀. λͺ…λ Ήμ–΄κ°€ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λ˜λ©΄ μžλ™μœΌλ‘œ COMMIT을 μˆ˜ν–‰ν•˜κ³  였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μžλ™μœΌλ‘œ ROLLBACK을 μˆ˜ν–‰ν•œλ‹€.

2) μ•”μ‹œμ  νŠΈλžœμž­μ…˜

Oracleκ³Ό 같은 λ°©μ‹μœΌλ‘œ μ²˜λ¦¬λœλ‹€. 즉 νŠΈλžœμž­μ…˜μ˜ μ‹œμž‘μ€ DBMSκ°€ μ²˜λ¦¬ν•˜κ³  νŠΈλžœμž­μ…˜μ˜ 끝은 μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ COMMIT λ˜λŠ” ROLLBACK으둜 μ²˜λ¦¬ν•œλ‹€. μΈμŠ€ν„΄μŠ€ λ‹¨μœ„ λ˜λŠ” μ„Έμ…˜ λ‹¨μœ„λ‘œ μ„€μ •ν•  수 μžˆλ‹€. μΈμŠ€ν„΄μŠ€ λ‹¨μœ„λ‘œ μ„€μ •ν•˜λ €λ©΄ μ„œλ²„ 속성 창의 μ—°κ²°ν™”λ©΄μ—μ„œ κΈ°λ³Έμ—°κ²° μ˜΅μ…˜ 쀑 μ•”μ‹œμ  νŠΈλžœμž­μ…˜μ— 체크λ₯Ό ν•΄μ£Όλ©΄ λœλ‹€. μ„Έμ…˜ λ‹¨μœ„λ‘œ μ„€μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„Έμ…˜ μ˜΅μ…˜ 쀑 SET IMPLICIT TRANSACTION ON을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

3) λͺ…μ‹œμ  νŠΈλžœμž­μ…˜

νŠΈλžœμž­μ…˜μ˜ μ‹œμž‘κ³Ό 끝을 λͺ¨λ‘ μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜λŠ” 방식이닀. BEGIN TRANSACTION (BEGIN TRAN ꡬ문도 κ°€λŠ₯)으둜 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³  COMMIT TRANSACTION(TRANSACTION은 μƒλž΅ κ°€λŠ₯) λ˜λŠ” ROLLBACK TRANSACTION(TRANSACTION은 μƒλž΅ κ°€λŠ₯)으둜 νŠΈλžœμž­μ…˜μ„ μ’…λ£Œν•œλ‹€. ROLLBACK ꡬ문을 λ§Œλ‚˜λ©΄ 졜초의 BEGIN TRANSACTION μ‹œμ κΉŒμ§€ λͺ¨λ‘ ROLLBACK이 μˆ˜ν–‰λœλ‹€.

3. ROLLBACK

ν…Œμ΄λΈ” λ‚΄ μž…λ ₯ν•œ λ°μ΄ν„°λ‚˜, μˆ˜μ •ν•œ 데이터, μ‚­μ œν•œ 데이터에 λŒ€ν•˜μ—¬ COMMIT μ΄μ „μ—λŠ” λ³€κ²½ 사항을 μ·¨μ†Œν•  수 μžˆλŠ”λ° λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” λ‘€λ°±(ROLLBACK) κΈ°λŠ₯을 μ‚¬μš©ν•œλ‹€. λ‘€λ°±(ROLLBACK)은 데이터 λ³€κ²½ 사항이 μ·¨μ†Œλ˜μ–΄ λ°μ΄ν„°μ˜ 이전 μƒνƒœλ‘œ 볡ꡬ되며, κ΄€λ ¨λœ 행에 λŒ€ν•œ 잠금(LOCKING)이 풀리고 λ‹€λ₯Έ μ‚¬μš©μžλ“€μ΄ 데이터 변경을 ν•  수 있게 λœλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•˜κ³  ROLLBACK을 μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•˜κ³  ROLLBACK을 μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

UPDATE PLAYER
  SET HEIGHT = 100; 

480개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μ‚­μ œν•˜κ³  ROLLBACK을 μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

DELETE FROM PLAYER; 

480개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

  • SQL Server의 ROLLBACK

SQL ServerλŠ” μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 바와 같이 AUTO COMMIT이 κΈ°λ³Έ λ°©μ‹μ΄λ―€λ‘œ μž„μ˜μ μœΌλ‘œ ROLLBACK을 μˆ˜ν–‰ν•˜λ €λ©΄ λͺ…μ‹œμ μœΌλ‘œ νŠΈλžœμž­μ…˜μ„ μ„ μ–Έν•΄μ•Ό ν•œλ‹€. μœ„μ˜ μ˜ˆμ œλŠ” μ•„λž˜μ™€ 같이 λ³€κ²½λœλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•˜κ³  ROLLBACK을 μ‹€ν–‰ν•œλ‹€.

[예제] SQL Server

BEGIN TRAN

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•˜κ³  ROLLBACK을 μ‹€ν–‰ν•œλ‹€.

[예제] SQL Server

BEGIN TRAN 

UPDATE PLAYER
  SET HEIGHT = 100; 

480개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μ‚­μ œν•˜κ³  ROLLBACK을 μ‹€ν–‰ν•œλ‹€.

[예제] SQL Server

BEGIN TRAN

DELETE FROM PLAYER; 

480개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

ROLLBACK ν›„μ˜ 데이터 μƒνƒœλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • 데이터에 λŒ€ν•œ λ³€κ²½ 사항은 μ·¨μ†Œλœλ‹€.

  • 이전 λ°μ΄ν„°λŠ” λ‹€μ‹œ μž¬μ €μž₯λœλ‹€.

  • κ΄€λ ¨λœ 행에 λŒ€ν•œ 잠금(LOCKING)이 풀리고, λ‹€λ₯Έ μ‚¬μš©μžλ“€μ΄ 행을 μ‘°μž‘ν•  수 있게 λœλ‹€.

COMMITκ³Ό ROLLBACK을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ λ‹€μŒκ³Ό 같은 효과λ₯Ό λ³Ό 수 μžˆλ‹€.

  • 데이터 무결성 보μž₯

  • 영ꡬ적인 변경을 ν•˜κΈ° 전에 λ°μ΄ν„°μ˜ λ³€κ²½ 사항 확인 κ°€λŠ₯

  • λ…Όλ¦¬μ μœΌλ‘œ μ—°κ΄€λœ μž‘μ—…μ„ κ·Έλ£Ήν•‘ν•˜μ—¬ 처리 κ°€λŠ₯

4. SAVEPOINT

μ €μž₯점(SAVEPOINT)을 μ •μ˜ν•˜λ©΄ λ‘€λ°±(ROLLBACK)ν•  λ•Œ νŠΈλžœμž­μ…˜μ— ν¬ν•¨λœ 전체 μž‘μ—…μ„ λ‘€λ°±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ ν˜„ μ‹œμ μ—μ„œ SAVEPOINTκΉŒμ§€ νŠΈλžœμž­μ…˜μ˜ μΌλΆ€λ§Œ λ‘€λ°±ν•  수 μžˆλ‹€. λ”°λΌμ„œ λ³΅μž‘ν•œ λŒ€κ·œλͺ¨ νŠΈλžœμž­μ…˜μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ SAVEPOINTκΉŒμ§€μ˜ νŠΈλžœμž­μ…˜λ§Œ λ‘€λ°±ν•˜κ³  μ‹€νŒ¨ν•œ 뢀뢄에 λŒ€ν•΄μ„œλ§Œ λ‹€μ‹œ μ‹€ν–‰ν•  수 μžˆλ‹€. (일뢀 νˆ΄μ—μ„œλŠ” 지원이 μ•ˆ 될 수 있음) 볡수의 μ €μž₯점을 μ •μ˜ν•  수 있으며, λ™μΌμ΄λ¦„μœΌλ‘œ μ €μž₯점을 μ •μ˜ν–ˆμ„ λ•ŒλŠ” λ‚˜μ€‘μ— μ •μ˜ν•œ μ €μž₯점이 μœ νš¨ν•˜λ‹€. λ‹€μŒμ˜ SQL문은 SVPT1μ΄λΌλŠ” μ €μž₯점을 μ •μ˜ν•˜κ³  μžˆλ‹€.

[Oracle]

SAVEPOINT SVPT1; 

μ €μž₯μ κΉŒμ§€ λ‘€λ°±ν•  λ•ŒλŠ” ROLLBACK 뒀에 μ €μž₯점 λͺ…을 μ§€μ •ν•œλ‹€.

[Oracle]

ROLLBACK TO SVPT1; 

μœ„μ™€ 같이 λ‘€λ°±(ROLLBACK)에 SAVEPOINT λͺ…을 λΆ€μ—¬ν•˜μ—¬ μ‹€ν–‰ν•˜λ©΄ μ €μž₯점 μ„€μ • 이후에 μžˆμ—ˆλ˜ 데이터 변경에 λŒ€ν•΄μ„œλ§Œ μ›λž˜ 데이터 μƒνƒœλ‘œ λ˜λŒμ•„κ°€κ²Œ λœλ‹€. SQL ServerλŠ” SAVE TRANSACTION을 μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆλ‹€. λ‹€μŒμ˜ SQL문은 SVTR1μ΄λΌλŠ” μ €μž₯점을 μ •μ˜ν•˜κ³  μžˆλ‹€.

[SQL Server]

SAVE TRANSACTION SVTR1; 

μ €μž₯μ κΉŒμ§€ λ‘€λ°±ν•  λ•ŒλŠ” ROLLBACK 뒀에 μ €μž₯점 λͺ…을 μ§€μ •ν•œλ‹€.

[SQL Server]

ROLLBACK TRANSACTION SVTR1; 

[예제] SAVEPOINTλ₯Ό μ§€μ •ν•˜κ³ , PLAYER ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•œ λ‹€μŒ λ‘€λ°±(ROLLBACK)을 이전에 μ„€μ •ν•œ μ €μž₯μ κΉŒμ§€ μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

SAVEPOINT SVPT1; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

ROLLBACK TO SVPT1;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] SQL Server

SAVE TRAN SVTR1;

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

ROLLBACK TRAN SVTR1; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] λ¨Όμ € SAVEPOINTλ₯Ό μ§€μ •ν•˜κ³  PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•œ λ‹€μŒ λ‘€λ°±(ROLLBACK)을 이전에 μ„€μ •ν•œ μ €μž₯μ κΉŒμ§€ μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

SAVEPOINT SVPT2; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

UPDATE PLAYER
  SET WEIGHT = 100; 

480개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

ROLLBACK TO SVPT2; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] SQL Server

SAVE TRAN SVTR2; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

UPDATE PLAYER
  SET WEIGHT = 100; 

480개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

ROLLBACK TRAN SVTR2; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] SAVEPOINTλ₯Ό μ§€μ •ν•˜κ³ , PLAYER ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μ‚­μ œν•œ λ‹€μŒ λ‘€λ°±(ROLLBACK)을 이전에 μ„€μ •ν•œ μ €μž₯μ κΉŒμ§€ μ‹€ν–‰ν•œλ‹€.

[예제] Oracle

SAVEPOINT SVPT3; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

DELETE FROM PLAYER; 

480개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

ROLLBACK TO SVPT3; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[예제] SQL Server

SAVE TRAN SVTR3; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

DELETE FROM PLAYER; 

480개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

ROLLBACK TRAN SVTR3; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

[κ·Έλ¦Ό β…‘-1-11]μ—μ„œ 보듯이 μ €μž₯점 A둜 되돌리고 λ‚˜μ„œ λ‹€μ‹œ B와 같이 미래 λ°©ν–₯으둜 되돌릴 μˆ˜λŠ” μ—†λ‹€. 일단 νŠΉμ • μ €μž₯μ κΉŒμ§€ λ‘€λ°±ν•˜λ©΄ κ·Έ μ €μž₯점 이후에 μ„€μ •ν•œ μ €μž₯점이 λ¬΄νš¨κ°€ 되기 λ•Œλ¬Έμ΄λ‹€. 즉 'ROLLBACK TO A'λ₯Ό μ‹€ν–‰ν•œ μ‹œμ μ—μ„œ μ €μž₯점 A 이후에 μ •μ˜ν•œ μ €μž₯점 BλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. μ €μž₯점 μ§€μ • 없이 "ROLLBACK"을 μ‹€ν–‰ν–ˆμ„ 경우 λ°˜μ˜μ•ˆλœ λͺ¨λ“  λ³€κ²½ 사항을 μ·¨μ†Œν•˜κ³  νŠΈλžœμž­μ…˜ μ‹œμž‘ μœ„μΉ˜λ‘œ λ˜λŒμ•„κ°„λ‹€.

[예제] μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κΈ° 전에 PLAYER ν…Œμ΄λΈ”μ˜ 데이터 κ±΄μˆ˜μ™€ λͺΈλ¬΄κ²Œκ°€ 100인 μ„ μˆ˜μ˜ 데이터 건수λ₯Ό ν™•μΈν•œλ‹€. β€» λͺΈλ¬΄κ²Œλ₯Ό 확인할 수 μžˆλŠ” WHERE 절 쑰건과 데이터 건수λ₯Ό μ§‘κ³„ν•˜κΈ° μœ„ν•œ COUNT ν•¨μˆ˜λŠ” 1μž₯ 5절과 6μ ˆμ—μ„œ μ„€λͺ…ν•œλ‹€.

[예제 및 μ‹€ν–‰ κ²°κ³Ό Oracle]

SELECT COUNT(*)
 FROM PLAYER; 
COUNT(*)

480

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

SELECT COUNT(*)
 FROM PLAYER
WHERE WEIGHT = 100; 
COUNT(*)

0

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

[예제] [κ·Έλ¦Ό β…‘-1-11]을 ν™•μΈν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³  SAVEPOINT A와 SAVEPOINT Bλ₯Ό μ§€μ •ν•œλ‹€. (νˆ΄μ— AUTO COMMIT μ˜΅μ…˜μ΄ μ μš©λ˜μ–΄ μžˆλŠ” 경우 ν•΄μ œν•¨)

[예제 및 μ‹€ν–‰ κ²°κ³Ό Oracle]

μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜ μ‹œμž‘

INSERT INTO PLAYER
           (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
    VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1); 

1개의 행이 λ§Œλ“€μ–΄μ‘Œλ‹€.

SAVEPOINT SVPT_A; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

UPDATE PLAYER
  SET WEIGHT = 100; 

481개의 행이 μˆ˜μ •λ˜μ—ˆλ‹€.

SAVEPOINT SVPT_B; 

μ €μž₯점이 μƒμ„±λ˜μ—ˆλ‹€.

DELETE FROM PLAYER; 

481개의 행이 μ‚­μ œλ˜μ—ˆλ‹€.

ν˜„μž¬ μœ„μΉ˜μ—μ„œ [예제] CASE 1,2,3을 μˆœμ„œλŒ€λ‘œ μˆ˜ν–‰ν•΄λ³Έλ‹€.

[예제] CASE1. SAVEPOINT B μ €μž₯μ κΉŒμ§€ λ‘€λ°±(ROLLBACK)을 μˆ˜ν–‰ν•˜κ³  λ‘€λ°± μ „ν›„ 데이터λ₯Ό 확인해본닀.

[예제 및 μ‹€ν–‰ κ²°κ³Ό Oracle]

SELECT COUNT(*)
 FROM PLAYER; 
COUNT(*)

0

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ROLLBACK TO SVPT_B; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

SELECT COUNT(*)
 FROM PLAYER; 
COUNT(*)

481

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

[예제] CASE2. SAVEPOINT A μ €μž₯μ κΉŒμ§€ λ‘€λ°±(ROLLBACK)을 μˆ˜ν–‰ν•˜κ³  λ‘€λ°± μ „ν›„ 데이터λ₯Ό 확인해본닀.

[예제 및 μ‹€ν–‰ κ²°κ³Ό Oracle]

SELECT COUNT(*)
 FROM PLAYER
WHERE WEIGHT = 100; 
COUNT(*)

481

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ROLLBACK TO SVPT_A; 

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

SELECT COUNT(*)
 FROM PLAYER
WHERE WEIGHT = 100; 
COUNT(*)

0

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

[예제] CASE3. νŠΈλžœμž­μ…˜ 졜초 μ‹œμ κΉŒμ§€ λ‘€λ°±(ROLLBACK)을 μˆ˜ν–‰ν•˜κ³  λ‘€λ°± μ „ν›„ 데이터λ₯Ό 확인해본닀.

[예제 및 μ‹€ν–‰ κ²°κ³Ό Oracle]

SELECT COUNT(*)
 FROM PLAYER; 
COUNT(*)

481

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ROLLBACK;

둀백이 μ™„λ£Œλ˜μ—ˆλ‹€.

SELECT COUNT(*)
 FROM PLAYER; 
COUNT(*)

480

1 개의 행이 μ„ νƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • μ•žμ„œ 배운 νŠΈλžœμž­μ…˜μ— λŒ€ν•΄μ„œ λ‹€μ‹œ ν•œ 번 μ •λ¦¬ν•œλ‹€.

ν•΄λ‹Ή ν…Œμ΄λΈ”μ— λ°μ΄ν„°μ˜ 변경을 λ°œμƒμ‹œν‚€λŠ” μž…λ ₯(INSERT), μˆ˜μ •(UPDATE), μ‚­μ œ(DELETE) μˆ˜ν–‰μ‹œ κ·Έ λ³€κ²½λ˜λŠ” λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•˜λŠ” 것이 컀밋(COMMIT)κ³Ό λ‘€λ°±(ROLLBACK)의 λͺ©μ μ΄λ‹€. 컀밋은 'λ³€κ²½λœ 데이터λ₯Ό ν…Œμ΄λΈ”μ΄ 영ꡬ적으둜 λ°˜μ˜ν•΄λΌ'λΌλŠ” 의미λ₯Ό κ°–λŠ” 것이고, λ‘€λ°±(ROLLBACK)은 'λ³€κ²½λœ 데이터가 λ¬Έμ œκ°€ μžˆμœΌλ‹ˆ λ³€κ²½ 사항을 μ·¨μ†Œν•˜κ³  λ³€κ²½ μ΄μ „μ˜ λ°μ΄ν„°λ‘œ λ³΅κ΅¬ν•˜λΌ'λŠ” μ˜λ―Έμ΄λ‹€. μ €μž₯점(SAVEPOINT/SAVE TRANSACTION)은 "데이터 변경을 사전에 μ§€μ •ν•œ μ €μž₯μ κΉŒμ§€λ§Œ λ‘€λ°±ν•˜λΌ"λŠ” μ˜λ―Έμ΄λ‹€. Oracle의 νŠΈλžœμž­μ…˜μ€ νŠΈλžœμž­μ…˜μ˜ λŒ€μƒμ΄ λ˜λŠ” SQL λ¬Έμž₯을 μ‹€ν–‰ν•˜λ©΄ μžλ™μœΌλ‘œ μ‹œμž‘λ˜κ³ , COMMIT λ˜λŠ” ROLLBACK을 μ‹€ν–‰ν•œ μ‹œμ μ—μ„œ μ’…λ£Œλœλ‹€. 단, λ‹€μŒμ˜ κ²½μš°μ—λŠ” COMMITκ³Ό ROLLBACK을 μ‹€ν–‰ν•˜μ§€ μ•Šμ•„λ„ μžλ™μœΌλ‘œ νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλœλ‹€.

  • CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE λ“± DDL λ¬Έμž₯을 μ‹€ν–‰ν•˜λ©΄ κ·Έ μ „ν›„ μ‹œμ μ— μžλ™μœΌλ‘œ μ»€λ°‹λœλ‹€.

  • λΆ€μ—°ν•˜λ©΄, DML λ¬Έμž₯ 이후에 컀밋 없이 DDL λ¬Έμž₯이 μ‹€ν–‰λ˜λ©΄ DDL μˆ˜ν–‰ 전에 μžλ™μœΌλ‘œ μ»€λ°‹λœλ‹€.

  • λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ •μƒμ μœΌλ‘œ 접속을 μ’…λ£Œν•˜λ©΄ μžλ™μœΌλ‘œ νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λœλ‹€.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이상 μ’…λ£Œλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ 접속이 λ‹¨μ ˆλ˜μ—ˆμ„ λ•ŒλŠ” νŠΈλžœμž­μ…˜μ΄ μžλ™μœΌλ‘œ λ‘€λ°±λœλ‹€.

SQL Server의 νŠΈλžœμž­μ…˜μ€ DBMSκ°€ νŠΈλžœμž­μ…˜μ„ μ»¨νŠΈλ‘€ν•˜λŠ” 방식인 AUTO COMMIT이 κΈ°λ³Έ 방식이닀. λ‹€μŒμ˜ κ²½μš°λŠ” Oracleκ³Ό 같이 μžλ™μœΌλ‘œ νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλœλ‹€.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이상 μ’…λ£Œλ‘œ λ°μ΄ν„°λ² μ΄μŠ€(μΈμŠ€ν„΄μŠ€)μ™€μ˜ 접속이 λ‹¨μ ˆλ˜μ—ˆμ„ λ•ŒλŠ” νŠΈλžœμž­μ…˜μ΄ μžλ™μœΌλ‘œ λ‘€λ°±λœλ‹€.

좜처 : λ°μ΄ν„°μ˜¨μ—μ–΄ – ν•œκ΅­λ°μ΄ν„°μ‚°μ—…μ§„ν₯원()

😧
⭐
🌠
https://dataonair.or.kr