λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’»/ORACLE

[ORACLE] 10일차 : νŠΈλžœμž­μ…˜, ORACLE 12C

by λ”°κΆˆ 2024. 3. 22.

 

νŠΈλžœμž­μ…˜μ΄λž€?
λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ λ˜λŠ”
ν•œλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  일련의 연산듀을 μ˜λ―Έν•œλ‹€.
νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ λ³‘ν–‰μ œμ–΄ 및 회볡 μž‘μ—…μ‹œ μ²˜λ¦¬λ˜λŠ” μž‘μ—…μ˜ 논리적 λ‹¨μœ„
μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œμ— λŒ€ν•œ μ„œλΉ„μŠ€ μš”κ΅¬μ‹œ μ‹œμŠ€ν…œμ΄ μ‘λ‹΅ν•˜κΈ° μœ„ν•œ μƒνƒœ λ³€ν™˜ κ³Όμ •μ˜ μž‘μ—…λ‹¨μœ„

 

 

 

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

  1. μ›μžμ„± 
    1. νŠΈλžœμž­μ…˜μ€ ν•œ 개 μ΄μƒμ˜ λ™μž‘μ„ λ…Όλ¦¬μ μœΌλ‘œ ν•œ 개의 μž‘μ—… λ‹¨μœ„λ‘œ 묢음
    2. μ›μžμ„±μ€ νŠΈλžœμž­μ…˜ λ²”μœ„μ— μžˆλŠ” λͺ¨λ“  λ™μž‘μ΄ λͺ¨λ‘ μ‹€ν–‰λ˜κ±°λ‚˜ λ˜λŠ” λͺ¨λ‘ 싀행이 μ·¨μ†Œλ¨μ„ 보μž₯
    3. λͺ¨λ“  λ™μž‘μ΄ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄ νŠΈλžœμž­μ…˜μ€ 성곡
    4. ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ νŠΈλžœμž­μ…˜μ€ μ‹€νŒ¨ν•˜κ³  λͺ¨λ“  과정을 λ‘€λ°±
  2. 일관성
    1. νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜λ©΄, μ‹œμŠ€ν…œμ€ λΉ„μ¦ˆλ‹ˆμ—μ„œ κΈ°λŒ€ν•˜λŠ” μƒνƒœκ°€ 됨.
    2. μ„œμ  ꡬ맀 νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄ 결제 λ‚΄μ—­, ꡬ맀 λ‚΄μ—­ μž”κ³  정보가 λΉ„μ¦ˆμ§€μŠ€μ— 맞게 μ €μž₯되고 변경됨
  3. 고립성
    1. νŠΈλžœμž­μ…˜μ€ λ‹€λ₯Έ νŠΈλž™μž­μ…˜κ³Ό λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λ©°, μ„œλ‘œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ λ™μΌν•œ 데이터에 λ™μ‹œμ— μ ‘κ·Ό ν•  경우 μ•Œλ§žκ²Œ λ™μ‹œ 접근을 μ œμ–΄
    2. λ™μ‹œ μ ‘κ·Ό μ œμ–΄λŠ” μ„€μ •ν•œ 격리 λ ˆλ²¨μ— 따라 달라짐.
  4. 지속성
    1. νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ˜λ©΄, κ·Έ κ²°κ³ΌλŠ” μ§€μ†μ μœΌλ‘œ μœ μ§€λ˜μ–΄μ•Ό 함.
    2. ν˜„μž¬μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ³€κ²½λ˜κ±°λ‚˜ 없어지더라도 λ°μ΄ν„°λŠ” μœ μ§€λ¨
    3. 일반적으둜 λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ λ‹€λ₯Έ 물리적인 μ €μž₯μ†Œλ₯Ό ν†΅ν•΄μ„œ νŠΈλžœμž­μ…˜ κ²°κ³Όκ°€ μ €μž₯

 

COMMIT κ³Ό ROLLBACK

 

νŠΈλžœμž­μ…˜ μ œμ–΄μ–΄λŠ” COMMIT ROLLBACK,SAVEPOINTκ°€ μžˆλ‹€. μ˜€λΌν΄μ€ INSERT, UPDATE,DELETE λͺ…령을 μ‹€ν–‰ν•˜λ©΄ μžλ™μœΌλ‘œ νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλœ μƒνƒœκ°€ μ•„λ‹ˆλ―€λ‘œ COMMIT λ˜λŠ” ROLLBACK λͺ…령을 μ΄μš©ν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ μ™„λ£Œ ν•΄μ•Ό ν•œλ‹€.

 

λͺ…μΉ­ μ„€λͺ…
COMMIT νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œ( INSERT, UPDATE,DELETE μ™„λ£Œ)된 μƒνƒœλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λœλ‹€
ROLLBACK νŠΈλžœμž­μ…˜μ΄ μ·¨μ†Œ( INSERT, UPDATE,DELETE μ·¨μ†Œ)된 μƒνƒœλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€
SAVEPOINT νŠΈλžœμž­μ…˜ λ‚΄μ˜ ν•œ μ‹œμ μ„ ν‘œμ‹œν•œλ‹€. ROLLBACK TO savepoint λͺ…λ Ήμ–΄λ‘œ ν‘œμ‹œ μ§€μ κΉŒμ§€ ROLLBACKν•˜λŠ”λ° 쓰인닀. 

 

 

CREATE TABLE emp2 AS SELECT * FROM emp; -- ν…Œμ΄λΈ” 생성

DELETE FROM emp2 WHERE empNo = '1001';
DELETE FROM emp2 WHERE empNo = '1002';
SELECT * FROM emp2;

SAVEPOINT a; -- νŠΈλžœμž­μ…˜μ˜ ν•œ μ‹œμ μ„ μ„€μ •
DELETE FROM emp2 WHERE empNo = '1003';
SELECT * FROM emp2;

ROLLBACK TO a; -- λ§ˆμ§€λ§‰μ— DELETE ν•œκ²ƒλ§Œ ROLLBACK
SELECT * FROM emp2 ORDER BY EMPNO;

 

 

 


 

12CλΆ€ν„° μΆ”κ°€λœ μƒˆλ‘œμš΄ κΈ°λŠ₯ 

 

 

Top-N

μΏΌλ¦¬λŠ” μˆœμ„œκ°€ μ§€μ •λœ 데이터 μ§‘ν•©μ—μ„œ λ°˜ν™˜λ˜λŠ” ν–‰ 수λ₯Ό μ œν•œν•˜λŠ” 방법을 μ œκ³΅ν•œλ‹€. μ„ΈνŠΈμ—μ„œ μƒμœ„ λ˜λŠ” ν•˜μœ„ "N"개의 ν–‰ 수λ₯Ό 리턴 ν•˜κ±°λ‚˜ 데이터λ₯Ό 톡해 νŽ˜μ΄μ§• ν•  λ•Œ 맀우 μœ μš©ν•˜λ‹€.

 

-- κΈ‰μ—¬ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•˜μ—¬ μ²˜μŒλΆ€ν„° 3개의 ν–‰λ§Œ 좜λ ₯
SELECT *
FROM emp
ORDER BY sal DESC
FETCH FIRST 3 ROWS ONLY;

--κΈ‰μ—¬ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•˜μ—¬ 5개λ₯Ό κ±΄λ„ˆλ›°κ³  λ‹€μŒλΆ€ν„° 3개의 ν–‰λ§Œ 좜λ ₯
SELECT *
FROM emp
ORDER BY sal DESC
OFFSET 5 ROWS FETCH FIRST 3 ROWS ONLY;

-- κΈ‰μ—¬ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•˜μ—¬ μƒμœ„ 10%
SELECT *
FROM emp
ORDER BY sal 
FETCH FIRST 10 PERCENT ROWS ONLY;

 

 

INVISIBLE column

12CλΆ€ν„°λŠ” ν…Œμ΄λΈ”μ—μ„œ INVISIBLE column(보이지 μ•ŠλŠ” 컬럼) 생성이 κ°€λŠ₯ν•˜λ‹€. INVISIBLE column은 λ‹€μŒ μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ 컬럼이 보이지 μ•ŠλŠ”λ‹€. 가상 μ»¬λŸΌμ„ INVISIBLE 컬럼으둜 λ§Œλ“€ 수 μžˆλ‹€.

 

 

CREATE TABLE test8(
        rum NUMBER PRIMARY KEY,
        name VARCHAR2(30) NOT NULL,
        tel VARCHAR2(30) INVISIBLE
        );
        
SELECT * FROM test8;--μ•ˆλ³΄μž„
SELECT * FROM col WHERE tname = 'TEST8'; --μ•ˆλ³΄μž„
SELECT * FROM cols WHERE table_name = 'TEST8'; -- λ³΄μž„
--INVISIBLE 컬럼이 λ³΄μ΄μ§€λ§Œ INVISIBLE μ»¬λŸΌμΈμ§€λŠ” 확인 λΆˆκ°€ 

SELECT * FROM user_tab_cols WHERE table_name = 'TEST8'; -- λ³΄μž„
--HIDDEN_COLUMN 컬럼 ν•­λͺ©μ—μ„œ INVISIBLE 확인 κ°€λŠ₯

INSERT INTO test8 VALUES(1,'a'); -- κ°€λŠ₯ tel 이 INVISIBLEμ΄λ―€λ‘œ κ°€λŠ₯
INSERT INTO test8 VALUES(2,'b','nn'); -- μ—λŸ¬

 

 

IDENTITY column

 

μžλ™μœΌλ‘œ μˆ«μžκ°€ μ¦κ°€λ˜λŠ” IDENTITY column을 μ§€μ›ν•œλ‹€. λ‚΄λΆ€μ μœΌλ‘œ μ‹œν€€μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€. IDENTITY column은 ν…Œμ΄λΈ”λ§ˆλ‹€ ν•˜λ‚˜μ˜ IDENTITY column만 κ°€μ§ˆ 수 μžˆλ‹€. 

 

CREATE TABLE test7(
        num NUMBER GENERATED AS IDENTITY PRIMARY KEY,
        subject VARCHAR2(100) NOT NULL
        );
        
INSERT INTO test7(subject)VALUES('a');
INSERT INTO test7(num,subject)VALUES(s,'b');--μ—λŸ¬

 

 

DEFAULT 

  • DEFAULT κ°’μœΌλ‘œ μ‹œν€€μŠ€μ˜ NETVALμ‚¬μš©

CREATE TABLE, ALTER TABLE λͺ…λ Ήμ˜ DEFAULT κ°’μœΌλ‘œ μ‹œν€€μŠ€μ˜ CURRVAL,NETVALλ₯Ό μ‚¬μš© ν•  수 μžˆλ‹€. DEFAULTκ°’μœΌλ‘œ μ‹œν€€μŠ€μ˜ NETVAL μžˆλŠ” ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό INSERTν›„ ROLLBACK ν•˜λ©΄ μ‹œν€€μŠ€ 값은 계속 μ¦κ°€ν•œλ‹€. 

 

  • NULL값을 μœ„ν•œ DEFAULTκ°’ μ§€μ •

NULL이 μž…λ ₯될 경우 NULLλŒ€μ‹  μž…λ ₯될 값을 DEFAULT둜 μ§€μ •ν•˜λŠ” κΈ°λŠ₯이 μΆ”κ°€ λ˜μ—ˆλ‹€. CREATE TABLE, ALTER TABLEλͺ…λ Ήμ˜ DEFAULT 값을 μ„€μ •ν•  λ•Œ ON NULL μ˜΅μ…˜μ„ μΆ”κ°€ν•˜λ©΄ NULL값이 μž…λ ₯λ˜λŠ” 경우 DEFAULT 값이 μΆ”κ°€λœλ‹€.