Computer Science ๐Ÿ“š/SQLD

[SQLD] 2๊ณผ๋ชฉ - 3์žฅ. ๊ด€๋ฆฌ ๊ตฌ๋ฌธ

leejaejae 2024. 11. 18. 18:45

์ œ 1์ ˆ DML - ์กฐํšŒ ๋ฐ ๊ฒ€์ƒ‰, ๋ฐ์ดํ„ฐ ๋ณ€ํ˜•

1. DML

  • ํ˜ธ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ ์†์— ์‚ฝ์ž…๋˜์–ด ์‚ฌ์šฉ, ๋ฐ์ดํ„ฐ ๋ถ€์†์–ด๋ผ๊ณ ๋„ ํ•จ
  • Procedural DML(์ ˆ์ฐจ์  ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด): ์ดˆ๊ธ‰์–ธ์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์Šจ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€ ๋ช…์„ธํ•ด์•ผ ํ•จ
  • Nonprocedural DML(๋น„์ ˆ์ฐจ์  ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด): ๊ณ ๊ธ‰์–ธ์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์Šจ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š”์ง€๋งŒ ๋ช…์„ธํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•  ๊ฒƒ์ธ์ง€๋Š” ํ•˜์ง€ ์•Š์Œ. ์„ ์–ธ์  ์–ธ์–ด๋ผ๊ณ ๋„ ํ•จ

2. INSERT - ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋ฐฉ๋ฒ•

  • INSERT INTO ๊ณ ๊ฐ (์ด๋ฆ„, ์ฃผ์†Œ) VALUES ('์ด์ˆœ์‹ ', 'ํ•œ์–‘');
  • INSERT INTO ํ…Œ์ด๋ธ”๋ช… (์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ / ์ƒ๋žต = ์ „์ฒด์ปฌ๋Ÿผ)
    VALUES (์ปฌ๋Ÿผ๋ช… ์ˆœ์„œ์— ๋งž์ถฐ ์ž…๋ ฅํ•  ๊ฐ’ ๋งคํ•‘ํ•ด ์ž‘์„ฑ);
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌธ์žํ˜•์ผ ๊ฒฝ์šฐ “”๋กœ ๋ฌถ์–ด์„œ ์ž…๋ ฅ

3. UPDATE - ์ •๋ณด ์ˆ˜์ •

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌธ์žํ˜•์ผ ๊ฒฝ์šฐ “”๋กœ ๋ฌถ์–ด์„œ ์ž…๋ ฅ
  • SQL>> “Employees๋ผ๋Š” ํ…Œ์ด๋ธ”์—์„œ EmployeeID๊ฐ€ 4์ธ ์ง์›์˜ Salary๋ฅผ 50000์œผ๋กœ ๋ณ€๊ฒฝ
    UPDATE Employees SET Salary = 50000 WHERE EmployeeID = 4;
  • UPDATE ํ…Œ์ด๋ธ”๋ช…
    SET ์นผ๋Ÿผ๋ช… = ๋ณ€๊ฒฝํ•  ๊ฐ’ WHERE ์กฐ๊ฑด;

4. DELETE - ์‚ญ์ œ

  • DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด;
  • FROM ๋ฌธ๊ตฌ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ
  • WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ ์‚ญ์ œ

5. SELECT - ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • SELECT [ALL(*)   | DISTINCT] ์นผ๋Ÿผ1, ์นผ๋Ÿผ2, … FROM ํ…Œ์ด๋ธ”๋ช…;
  • ALL(*): ๋””ํดํŠธ ์˜ต์…˜ (์ค‘๋ณต ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ)
  • DISTINCT: ์ค‘๋ณต์ œ๊ฑฐ ํ•˜์—ฌ 1๊ฑด์œผ๋กœ ์ถœ๋ ฅ
  • ์กฐํšŒ๋œ ๊ฒฐ๊ณผ์— ๋ณ„๋ช…(์—๋ฆฌ์•„์Šค/ALIAS)์„ ๋ถ€์—ฌํ•ด์„œ ์นผ๋Ÿผ ๋ ˆ์ด๋ธ” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์นผ๋ ๋ช… ๋ฐ”๋กœ ๋’ค์— ์˜ค๊ณ , ์นผ๋Ÿผ๋ช…๊ณผ ALIAS ์‚ฌ์ด์— AS ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์„ ํƒ์ž„)
  • ๊ณต๋ฐฑ/ํŠน์ˆ˜๋ฌธ์ž, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ “”๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉ

6. ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

  • NUMBER์™€ DATE ์ž๋ฃŒํ˜•์— ์ ์šฉ (์ˆ˜ํ•™ ์‚ฌ์น™์—ฐ์‚ฐ๊ณผ ๋™์ผ)

7. ํ•ฉ์„ฑ ์—ฐ์„ฑ์ž - ๋ฌธ์ž์™€ ๋ฌธ์ž๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ•ฉ์„ฑ(CONCATENATION) ์—ฐ์‚ฐ์ž

  • [Oracle] ||
  • [SQL Server] +
  • SQL>> SELECT PLAYER_NAM+’์„ ์ˆ˜,’+HEIGHT+’cm,’+WEIGHT+’kg’ ์ฒด๋ ฅ์ •๋ณด FROM PLAYER;
    ์ •๊ฒฝ๋Ÿ‰์„ ์ˆ˜,173cm,65kg ์ •์€์ต์„ ์ˆ˜, 176cm, 63kg

 

์ œ 2์ ˆ TCL - ํŠธ๋žœ์žญ์…˜ ์ œ์–ด

1. TCL

  • ๋…ผ๋ฆฌ์  ์ž‘์—…๋‹จ์œ„๋ฅผ ๋ฌถ์–ด DML์— ์˜ํ•ด ์กฐ์ž‘๋œ ๊ฒฐ๊ณผ๋ฅผ ์ž‘์—…๋‹จ์œ„ ๋ณ„๋กœ ์ œ์–ด
  • ์ผ๋ถ€์—์„œ๋Š” DCL๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ๋„ ํ•จ

2. ํŠธ๋žœ์žญ์…˜

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์ ์ธ ์—ฐ์‚ฐ ๋‹จ์œ„
  • ํŠธ๋žœ์žญ์…˜์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ SQL ๋ฌธ์žฅ์ด ํฌํ•จ๋จ
  • ํŠธ๋žœ์žญ์…˜์€ ๋ฐ€์ ‘ํžˆ ๊ด€๋ จ๋˜์–ด ๋ถ„๋ฆฌ๋  ์ˆ˜ ์—†๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ DB์กฐ์ž‘์„ ๊ฐ€๋ฆฌํ‚ด
  • ๋ถ„ํ• ํ•  ์ˆ˜ ์—†๋Š” ํšŒ์†Œ๋‹จ์œ„, ์ „๋ถ€ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์ „๋ถ€ ์ทจ์†Œํ•ด์•ผ ํ•จ

3. ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•

  1. ์›์ž์„ฑ(atomicity): ๋ชจ๋‘ ์„ฑ๊ณต ์•„๋‹˜ ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‚จ๊ธฐ(Rollback)
  2. ์ผ๊ด€์„ฑ(consistency): ํŠธ๋žœ์žญ์…˜์ด ์‹ค๋œ ์ดํ›„์—๋„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋‚ด์šฉ ์ž˜๋ชป ์žˆ์œผ๋ฉด ์•ˆ๋จ
  3. ๋…๋ฆฝ์„ฑ.๊ณ ๋ฆฝ์„ฑ(isolation): ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ ๋ฐ›์œผ๋ฉด ์•ˆ๋จ
  4. ์ง€์†์„ฑ(durability): ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉด ๊ฐฑ์‹ ๋œ ๋ฐ๋ฒ  ๋‚ด์šฉ์€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ

4. ํŠธ๋žœ์žญ์…˜์„ ์ปจํŠธ๋กคํ•˜๋Š” TCL

  • ์ปค๋ฐ‹(COMMIT): ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜์˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ๋ฒ ์— ๋ฐ˜์˜์‹œํ‚ค๋Š” ๊ฒƒ
  • ๋กค๋ฐฑ(ROLLBACK): ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์ด์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ
  • ์ €์žฅ์ (SAVEPOINT): ์ €์žฅ์  ๊ธฐ๋Šฅ
  • ์ž ๊ธˆ(LOCKING): ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ณ ๋ก ์ œํ•œ
  • ํŠธ๋žœ์žญ์…˜ ๋Œ€์ƒ์ด ๋˜๋Š” SQL
    • UPDATE, INSERT, DELETE ๋“ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” DML ๋ฌธ
    • SELECT FOR UPDATE ๋“ฑ ๋ฐฐํƒ€์  LOCK์„ ์š”๊ตฌํ•˜๋Š” SELECT ๋ฌธ

 

5. COMMIT - ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œํ•œ ์ž๋ฃŒ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ

  • COMMIT ์ด์ „ ์ƒํƒœ
    • ๋‹จ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ์—๋งŒ ์˜ํ–ฅ ์ฃผ๊ณ , ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌ ์‚ฌ๋Šฅ
    • ํ˜„์žฌ ์‚ฌ์šฉ์ž๋Š” SELECT ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ ํ™•์ธ ๊ฐ€๋Šฅ
    • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ํ™•์ธ ๋ถˆ๊ฐ€๋Šฅ
    • ๋ณ€๊ฒฝ๋œ ํ–‰์€ ์•„์ง ์ž ๊ธˆ(LOCKING) ์„ค์ •๋˜์–ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ
  • COMMIT ์ดํ›„ ์ƒํƒœ
    • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ๋ฒ ์— ์˜๊ตฌ ๋ฐ˜์˜
    • ์ด์ „ ๋ฐ์ดํ„ฐ๋Š” ์˜์›ํžˆ ์žƒ์–ด๋ฒ„๋ฆผ
    • ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฐ๊ณผ ์กฐํšŒ ๊ฐ€๋Šฅ
    • ๋ณ€๊ฒฝ๋œ ํ–‰์€ ์ž ๊ธˆ ํ•ด์ œ๋˜์–ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • Auto COMMIT
    • [Oracle] ์ž„์˜๋กœ COMMIT ํ˜น์€ ROLLBACK์„ ์ˆ˜ํ–‰ํ•ด ์ฃผ์–ด์•ผ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ
    • [SQL Server] ๊ธฐ๋ณธ์ ์œผ๋กœ Auto Commit ๋ชจ๋“œ, DML ๊ตฌ๋ฌธ์ด ์„ฑ๊ณต์ด๋ฉด ์ž๋™์œผ๋กœ COMMIT๋˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ROLLBACK ์ฒ˜๋ฆฌ

6. ROLLBACK - COMMIT ์ด์ „์œผ๋กœ ๋˜๋Œ๋ฆผ

  • ํ…Œ์ด๋ธ”์— ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด COMMIT ์ด์ „์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ทจ์†Œ
  • ์ด์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์‹œ ์žฌ์ €๋‹น๋จ
  • ๊ด€๋ จ ํ–‰์— ๋Œ€ํ•œ ์ž ๊ธˆ์ด ํ’€๋ฆฌ๊ณ , ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

7. COMMIT๊ณผ ROLLBACK์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํšจ๊ณผ

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด๋‹น
  • ์˜๊ตฌ์ ์ธ ๋ณ€๊ฒฝ์„ ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ๊ด€๋œ ์ž‘์—…์„ ๊ทธ๋ฃนํ•‘ํ•˜์—ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

8. SAVEPOINT - ์ €์žฅ์ , ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์‚ฌ์ „์— ์ง€์ •ํ•œ ์ €์žฅ์ ๊นŒ์ง€๋งŒ ๋กค๋ฐฑ

  • ์ €์žฅ๋ค์„ ์ •์˜ํ•˜๋ฉด ๋กค๋ฐฑ์„ ํ•  ๊ฒฝ์šฐ ์ „์ฒด ๋กค๋ฐฑ์ด ์•„๋‹Œ ์ €์žฅ์ ๊นŒ์ง€์˜ ์ผ๋ถ€๋งŒ ๋กค๋ฐฑ
  • SAVEPOINT๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋™์ผ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ์  ์ง€์ • ์‹œ ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ •์˜ํ•œ ์ €์žฅ์ ์ด ์œ ํšจ
  • Point 1๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ๋‚˜๋ฉด ๊ทธ๋ณด๋‹ค ๋ฏธ๋ž˜์ธ Point2๋กœ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Œ
  • ์ €์žฅ์  ์—†์ด ๋กค๋ฐฑํ•˜๋ฉด ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ทจ์†Œ
  • [Oracle] SAVEPOINT ํฌ์ธํŠธ ์ด๋ฆ„; ROLLBACK TO ํฌ์ธํŠธ ์ด๋ฆ„;
    [SQL Server] SAVE TRANSACTION ํฌ์ธํŠธ ์ด๋ฆ„; ROLLBACK TRANSACTION ํฌ์ธํŠธ ์ด๋ฆ„;

 

์ œ 3์ ˆ DDL - ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ •์˜

1. ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•

  • ์ˆซ์ž ํƒ€์ž…
    • ANSI/ISO ๊ธฐ์ค€: Numeric, Decimal, Dec, Small Int, Integer, Int, Big, int, Float, Real, Double Precision
    • SQL Server / Sybase: ์ž‘์Œ ์ •์ˆ˜, ์ •์ˆ˜, ํฐ ์ •์ˆ˜, ์‹ค์ˆ˜ ๋“ฑ + Money, Small Money
    • Oracle: ์ˆซ์žํ˜• ํƒ€์ž…์— ๋Œ€ํ•ด์„œ Number ํ•œ ๊ฐ€์ง€ ํƒ€์ž…๋งŒ ์ง€์›
    • ๋ฒค๋”์—์„œ ANSI/ISO ํ‘œ์ค€์„ ์‚ฌ์šฉํ•  ๋• ๊ธฐ๋Šฅ์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌํ˜„, ํ‘œ์ค€๊ณผ ๋‹ค๋ฅธ ์šฉ์–ด ์‚ฌ์šฉ ํ—ˆ์šฉ
  • ๋ฌธ์ž์—ด ์œ ํ˜•
    • CHAR(๊ณ ์ •๊ธธ์ด) ๊ณผ VARCHAT(๊ฐ€๋ณ€๊ธธ์ด)์˜ ์ฐจ์ด
    • CHAR์—์„œ ๋ฌธ์ž์—ด ๋น„๊ต = ๊ณต๋ฐฑ์„ ์ฑ„์›Œ์„œ ๋น„๊ต
    • VARCHAR์—์„œ ๋น„๊ต = ๋งจ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ๋ฌธ์ž์”ฉ ๋น„๊ต (๊ณต๋ฐฑ๋„ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ์ทจ๊ธ‰)
  • ํ…Œ์ด๋ธ”์˜ ์นผ๋Ÿผ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ 4๊ฐ€์ง€ ์œ ํ˜•
    • CHARACTER(s), VARCHAR(s), NUMERIC, DATETIME

2. CREATE TABLE - ํ…Œ์ด๋ธ” ์ƒ์„ฑ

  • CREATE TABLE ํ…Œ์ด๋ธ” ์ด๋ฆ„( ์นผ๋Ÿผ๋ช…1 DATATYPE [DEFAULT ํ˜•์‹], …);
    CREATE TABLE PLAYER ( PLAYER_ID CHAR(7) NOT NULL, BIRTH CHAR(1) INT);

  • ๋ช…๋ช… ๊ทœ์น™: ์•ŒํŒŒ๋ฒณ ์ˆซ์ž _(์–ธ๋”๋ฐ”) $(๋‹ฌ๋Ÿฌ) #(์ƒต)
  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ์‹œ ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์€ ํ•˜์ง€ ์•Š์Œ. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ด๋ธ”์ด๋‚˜ ์นผ๋Ÿผ๋ช… = ๋Œ€๋ฌธ์ž๋กœ 
  • DATETIME ๋ฐ์ดํ„ฐ ์œ ํ˜•์—๋Š” ๋ณ„๋„๋กœ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์Œ
  • ๋ฌธ์ž ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ๋ฐ˜๋“œ์‹œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ํ‘œ์‹œ
  • ์นผ๋Ÿผ๊ณผ ์นผ๋Ÿผ์˜ ๊ตฌ๋ถ„์€ ์ฝค๋งˆ๋กœ ํ•˜๋˜, ๋งˆ์ง€๋ง‰ ์นผ๋Ÿผ์€ ์ฝค๋งˆx
  • ์นผ๋Ÿผ์— ๋Œ€ํ•œ ์ œ์•ฝ์กฐ๊ฑด์ด ์žˆ์œผ๋ฉด CONSTRAINT๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€

3. ์ œ์•ฝ์กฐ๊ฑด(CONSTRAINT) - ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€ ๋ฐฉ๋ฒ•, ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋งŒ ์œ ์ง€

  • PK (Primary Key), ๊ธฐ๋ณธํ‚ค: ํ•œ ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜๋งŒ ์ง€์ • ๊ฐ€๋Šฅ(unique), NULL ์ž…๋ ฅ ๋ถˆ๊ฐ€(๊ธฐ๋ณธํ‚ค ์ œ์•ฝ = ๊ณ ์œ ํ‚ค & not null)
  • FK (Foreign Key), ์™ธ๋ž˜ํ‚ค: ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์˜ต์…˜ ์„ ํƒ ๊ฐ€๋Šฅ, ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ
  • UNIQUE Key, ๊ณ ์œ ํ‚ค: NULL ๊ฐ€๋Šฅ, ํ–‰์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ‚ค
  • NULL: ์•„์ง ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’, ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ (์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’, 0๊ณผ ๊ณต๋ฐฑ(“ “)์€ NULL์ด ์•„๋‹˜)
  • NOT NULL: NULL ๊ฐ’ ์ž…๋ ฅ ๊ธˆ์ง€
  • CHECK: ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์นผ๋Ÿผ์— ์„ค์ •ํ•˜๋Š” ์ œ์•ฝ, ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„ ๋“ฑ์„ ์ œํ•œ, TRUE or FALSE ๋…ผ๋ฆฌ์‹์„ ์ง€์ •

4. ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ํ™•์ธ

  • [Oracle] DESCRIBE ํ…Œ์ด๋ธ”๋ช…; (๊ฐ„๋žตํžˆ DESC ํ…Œ์ด๋ธ”๋ช…;)
  • [SQL Server] sp_help ‘dbo.ํ…Œ์ด๋ธ”๋ช…

5. SELECT ๋ฌธ์žฅ์„ ํ†ตํ•œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‚ฌ๋ก€

  • CREATE TABLE AS (CTAS)
    • CREATE TABLE AS ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ๋”ฐ๋กœ ์ž‘์„ฑX
    • ๊ธฐ์กด ํ…Œ์ด๋ธ” ์ œ์•ฝ์กฐ๊ฑด ์ค‘ NOT NULL ์ œ์•ฝ ์กฐ๊ฑด๋งŒ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์— ๋ณต์ œ๋จ
    • ๋‹ค๋ฅธ ์ œ์•ฝ์กฐ๊ฑด(๊ธฐ๋ณธํ‚ค, ๊ณ ์œ ํ‚ค, ์™ธ๋ž˜ํ‚ค, CHECK ๋“ฑ)์€ ๋ณต์‚ฌ ๋˜์ง€ ์•Š์•„์„œ ๋‹ค์‹œ ์ ์šฉํ•ด์•ผ ํ•จ
    • ๊ณ„์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ALTER TABLE ๊ธฐ๋Šฅ ์‚ฌ์šฉ
    • [Oracle] CREATE TABLE ํ…Œ์ด๋ธ”๋ช…B AS SELECT * FROM ํ…Œ์ด๋ธ”๋ช… A;โ€จ
      ex) ์„ ์ˆ˜(PLAYER) ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ TEAM_TEMP๋ผ๋Š” ๋ณต์‚ฌ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐโ€จ
      CREATE TABLE TEAM_TEMP AS SELECT * FROM TEAM;
  • SQL Server์—์„œ๋Š” Select ~ Into ~ ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ™์€ ๊ฒฐ๊ณผ
    • [SQL Server] SELECT * INTO ํ…Œ์ด๋ธ”๋ช…B FROM ํ…Œ์ด๋ธ”๋ช…A;
      โ€จSELECT * INTO TEAM_TEMP FROM TEAM; (1๊ฐœ ํ–‰์ด ์˜ํ–ฅ ๋ฐ›์Œ)

6. ALTER TABLE - ์นผ๋Ÿผ ์ถ”๊ฐ€/์‚ญ์ œ or ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€/์‚ญ์ œ

  • ์นผ๋Ÿผ ์ถ”๊ฐ€/์‚ญ์ œ
    • ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] ADD [์ถ”๊ฐ€ํ•  ์ปฌ๋Ÿผ๋ช…][๋ฐ์ดํ„ฐํƒ€์ž…(๊ธธ์ด)]: ์นผ๋Ÿผ ์ถ”๊ฐ€
      โ€จex) user ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐํƒ€์ž…์ด varchar(30)์ธ adress ์ปฌ๋Ÿผ ์ถ”๊ฐ€
      โ€จALTER TABLE USER ADD ADRESS VARCHAR(30);
    • ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] DROP [์‚ญ์ œํ•  ์ปฌ๋Ÿผ๋ช…]: ์นผ๋Ÿผ ์‚ญ์ œโ€จ
      ex) ALTER TABLE USER DROP ADRESS;
    • ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] MODIFY [์ปฌ๋Ÿผ๋ช…][์ˆ˜์ • ๋ฐ์ดํ„ฐํƒ€์ž…(์ˆ˜์ • ๊ธธ์ด)]: ์นผ๋Ÿผ ์†์„ฑ ๋ณ€๊ฒฝ
      โ€จ[Oracle] ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY (์นผ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐ ์œ ํ˜• DEFAULT NOT NULL);โ€จ
      [SQL Server] ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ALTER COLUMN ์นผ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐ ์œ ํ˜• DEFAULT NOT NULL;โ€จ
      ex) ALTER TABLE USER MODIFY USER_EMIAL CHAR(30);
    • ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] RENAME [๊ธฐ์กด ์ปฌ๋Ÿผ๋ช…] TO [์ˆ˜์ • ์ปฌ๋Ÿผ๋ช…]: ์นผ๋Ÿผ๋ช… ๋ณ€๊ฒฝโ€จ
      ex) ์œ ์ € ํ…Œ์ด๋ธ”์˜ age ์ปฌ๋Ÿผ๋ช…์„ use_age๋กœ ๋ณ€๊ฒฝโ€จ
      ALTER TABLE USER RENAME AGE TO USER_AGE;
    • RENAME ๋ณ€๊ฒฝ ์ „ ํ…Œ์ด๋ธ”๋ช… TO ๋ณ€๊ฒฝํ›„ ํ…Œ์ด๋ธ”๋ช…: ํ…Œ์ด๋ธ” ๋ช… ๋ณ€๊ฒฝ
  • ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€/์‚ญ์ œ
    • ALTER TABLE + ADD CONSTRAINT: ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
    • ALTER TABLE + DROP CONSTRAINT: ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ
  • ALTER TABLE ์นผ๋Ÿผ ๋ณ€๊ฒฝ ์ฃผ์˜์‚ฌํ•ญ
    • ์นผ๋Ÿผ์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆด ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ค„์ด๊ธฐX
    • null๋งŒ ์žˆ๊ฑฐ๋‚˜ ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์นผ๋Ÿผ ํญ ์ค„์ด๊ธฐ ๊ฐ€๋Šฅ
    • null์ด ์žˆ์„ ๋•Œ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•(์ˆซ์ž, ๋ฌธ์ž) ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • null์ด ์—†์œผ๋ฉด not null ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
    • ๊ธฐ๋ณธ๊ฐ’(default) ๋ณ€๊ฒฝ ์ž‘์—… ์ดํ›„ ๋ฐœ์ƒํ•˜๋Š” ํ–‰ ์‚ฝ์ž…์— ๋Œ€ํ•ด์„œ๋งŒ ๊ธฐ๋ณธ๊ฐ’ ๋ณ€๊ฒฝ
  • PK ์ œ์•ฝ์กฐ๊ฑด ์ƒ์„ฑํ•˜๋Š” DDL

  • ์™ธ๋ž˜ํ‚ค(FK) ์ฐธ๊ณ ์‚ฌํ•ญ
    • ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ์„ค์ •ํ•  ์ˆ˜ ์ž‡์Œ
    • ์™ธ๋ž˜ํ‚ค๋Š” NULL๊ฐ’ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
    • ํ•œ ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌ ๊ฐ€๋Šฅํ•จ
    • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์„ ๋ฐ›์Œ

7. DROP TABLE - ํ…Œ์ด๋ธ” ์ œ๊ฑฐ

  • ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์‚ญ์ œํ•  ์ปฌ๋Ÿผ๋ช…;
    โ‘  DROP TABLE PLAYER; ํ…Œ์ด๋ธ” ์ „๋ถ€ ์‚ญ์ œ, ํšŒ๋ณต ๋ถˆ๊ฐ€
    โ‘ก ALTER TABLE PLAYER DROP COLUMN ADDRESS; ํ…Œ์ด๋ธ” ์ผ๋ถ€ ์นผ๋Ÿผ ์‚ญ์ œ, ํšŒ๋ณต ๋ถˆ๊ฐ€
  • DROP TABLE ํ…Œ์ด๋ธ”๋ช… [CASCADE CONSTRAINT]; ์ œ์•ฝ์กฐ๊ฑด๋ช…;
  • DROP ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฐ ๊ตฌ์กฐ๋ฅผ ์‚ญ์ œ
  • CASCADE CONSTRAINT ์˜ต์…˜์€ ํ•ด๋‹น ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋˜ ์ฐธ์กฐ๋˜๋Š” ์ œ์•ฝ๋„ ๋‹ค ์‚ญ์ œ
  • SQL Server์—์„œ๋Š” CASCADE ์˜ต์…˜ ์กด์žฌX, ํ…Œ์ด๋ธ” ์‚ญ์ œ ์ „์— ์ฐธ์กฐ FK ์ œ์•ฝ์กฐ๊ฑด, ์ฐธ์กฐ ํ…Œ์ด๋ธ” ๋จผ์ € ์‚ญ์ œ

8. TRUNCATE TABLE - ํ…Œ์ด๋ธ” ๋น„์šฐ๊ธฐ

  • TRUNCATE TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์‚ญ์ œํ•  ์ปฌ๋Ÿผ๋ช…;
  • ํ…Œ์ด๋ธ” ์‚ญ์ œ๊ฐ€ ์•„๋‹Œ ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰ ์ œ๊ฑฐ ํ›„ ์ €์žฅ๊ณต๊ฐ„ ์žฌ์‚ฌ์šฉ
  • ๊ตฌ์กฐ ์ž์ฒด ์‚ญ์ œ๋Š” DROP COLUMN ์‚ญ์ œํ•  ์นผ๋Ÿผ๋ช…

9. DDL๊ณผ DML์˜ ์‚ญ์ œ

  • DDL์€ ๋ฐ˜๋“œ์‹œ AUTO COMMIT์ด ์ผ์–ด๋‚จ DROP, TRUNCATE ์›์ƒ๋ณต๊ตฌ ๋ถˆ๊ฐ€
  • DML์€ ์‚ฌ์šฉ์ž๊ฐ€ COMMIT ํ•ด์•ผํ•จ DELETE ํ…Œ์ด๋ธ” ์‚ญ์ œํ•ด๋„ ROLLBACK์œผ๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

10. ์ฐธ์กฐ ๋™์ž‘

  • Automatic: ์ž์‹ ์‚ฝ์ž… ์‹œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— pk๊ฐ€ ์—†์œผ๋ฉด ๋ถ€๋ชจ pk ์ƒ์„ฑ ํ›„ ์ž์‹์— ์‚ฝ์ž…
  • Dependent: ์ž์‹ ์‚ฝ์ž… ์‹œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— pk๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ ์ž์‹ ์‚ฝ์ž… ํ—ˆ์šฉ
  • Cascade: ๋ถ€๋ชจ ์‚ญ์ œ ์‹œ ์ž์‹ ๊ฐ™์ด ์‚ญ์ œ
  • Restrict: ๋ถ€๋ชจ ์‚ญ์ œ ์‹œ ์ž์‹ ํ…Œ์ด๋ธ”์— pk๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ถ€๋ชจ ์‚ญ์ œ ํ—ˆ์šฉ

 

์ œ 4์ ˆ DCL - ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ํšŒ์ˆ˜

1. DCL

  • ์œ ์ €๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋Š” ๋ช…๋ น์–ด, ๋ณด์•ˆ์„ ์œ„ํ•ด ํ•„์š”
  • GRANT: ๊ถŒํ•œ ๋ถ€์—ฌ (SQL GRANT ๊ถŒํ•œ ON ์˜ค๋ธŒ์ ํŠธ TO ์œ ์ €๋ช…;)
  • REVOKE: ๊ถŒํ•œ ์ œ๊ฑฐ (SQL REVOKE ๊ถŒํ•œ ON ์˜ค๋ธŒ์ ํŠธ TO ์œ ์ €๋ช…;)

2. ๊ถŒํ•œ

  • SELECT, INSERT, UPDATE, DELETE, ALTER, ALL: DML ๊ด€๋ จ ๊ถŒํ•œ
  • REFERENCES: ์ง€์ •๋œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์„ ์ƒ์„ฑํ•˜๋Š” ๊ถŒํ•œ
  • INDEX: ์ง€์ •๋œ ํ…Œ์ด๋ธ”์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ถŒํ•œ

3. Oracle ๊ธฐ๋ณธ ์œ ์ € ์ข…๋ฅ˜

  • SCOTT: Oracle ํ…Œ์ŠคํŠธ์šฉ ์ƒ˜ํ”Œ ์œ ์ € (๋””ํดํŠธ ํŒจ์Šค์›Œ๋“œ: TIGER)
  • SYS: DBA ROLE์„ ๋ถ€์—ฌ๋ฐ›์€ ์œ ์ € 
  • SYSTEM: ๋ฐ๋ฒ ์˜ ๋ชจ๋“  ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›์€ DBA ์œ ์ €, Oracle ์„ค์น˜ ์™„๋ฃŒ ์‹œ์— ํŒจ์Šค์›Œ๋“œ ์„ค์ •

4. ROLE์„ ์ด์šฉํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ

  • ๋งŽ์€ ๋ฐ๋ฒ ์—์„œ ์œ ์ €๋“ค๊ณผ ๊ถŒํ•œ๋“ค ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ ์—ญํ• ์„ ํ•˜๋Š” ROLE wprhd
  • ๊ถŒํ•œ์˜ ์ง‘ํ•ฉ, ๊ถŒํ•œ์„ ์ผ์ผ์ด ๋ถ€์—ฌํ•˜์ง€ ์•Š๊ณ  ROLE๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๊ถŒํ•œ์„ ๋ถ€์—ฌ
  • ์‹œ์Šคํ…œ ๊ถŒํ•œ, ์˜ค๋ธŒ์ ํŠธ ๊ถŒํ•œ ๋ชจ๋‘ ๋ถ€์—ฌ ๊ฐ€๋Šฅ
  • ROLE์€ ์œ ์ €์—๊ฒŒ ์ง์ ‘ ๋ถ€์—ฌํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ROLE์— ํฌํ•จ๋˜์–ด ์œ ์ €์—๊ฒŒ ๋ถ€์—ฌ๋  ์ˆ˜ ์žˆ์Œ

5. Oracle์—์„œ ์ œ๊ณตํ•˜๋Š” ROLE ์ข…๋ฅ˜

  • CONNECT: CREATE SESSION๊ณผ ๊ฐ™์€ ๋กœ๊ทธ์ธ ๊ถŒํ•œ
  • RESOURCE: CREATE TABLE๊ณผ ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ(๋ฆฌ์†Œ์Šค) ์ƒ์„ฑ ๊ถŒํ•œ

6. ์œ ์ € ์‚ญ์ œ ๋ช…๋ น์–ด์™€ ๊ถŒํ•œ

  • DROP USER ์œ ์ €๋ช… CASCADE;
  • CASCADE ์˜ต์…˜์€ ํ•ด๋‹น ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋จผ์ € ์‚ญ์ œ ํ›„ ์œ ์ €๋ฅผ ์‚ญ์ œ