๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ด๋ก /DB

[๋ฌด์กฐ๊ฑด ๋”ฐ๋ผํ•˜๊ธฐ] ํŠธ๋žœ์žญ์…˜

by 6161990 2021. 5. 26.

๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜ Transaction

  • ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๊ธฐ๊นŒ์ง€ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋ฅผ ์˜๋ฏธ.
  • Oracle DataBase๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „๋‹ฌํ•œ insert, update, delete ๋ฌธ์„ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋””์Šคํฌ์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Œ(ํ…Œ์ด๋ธ”์ƒ์„ฑ,์‚ญ์ œ๋Š” ์ž๋™ ๋””์Šคํฌ ๋ฐ˜์˜๋จ)=> ์‹ค์ˆ˜๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•จ.
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ๋˜์—ˆ์•„๋ฉด ์ด๋ฅผ ๋””์Šคํฌ์— ๋ฐ˜์˜ํ•ด์•ผํ•จ.
  • ์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ  ๋””์Šคํฌ์— ๋ฐ˜์˜๋  ๋•Œ๊นŒ์ง€์˜ ์ž‘์—…์˜ ๋‹จ์œ„ = ํŠธ๋žœ์žญ์…˜.
    • COMMIT : ํŠธ๋žœ์žญ์…˜์„ ์™„๋ฃŒํ•˜๊ณ  ๋””์Šคํฌ์— ๋ฐ˜์˜. ๋ณต๊ตฌ ๋ถˆ๊ฐ€
    • ROLLBACK : ํŠธ๋žœ์žญ์…˜์„ ์ทจ์†Œ
    • SAVEPOINT : RALLBACK์˜ ๋‹จ์œ„๋ฅผ ์ง€์ •. ์ง€์ • ์‹œ, SAVEPOINT [์„ธ์ด๋ธŒํฌ์ธํŠธ์ด๋ฆ„] / ํ˜ธ์ถœ ์‹œ, ROLLBACK TO [์„ธ์ด๋ธŒํฌ์ธํŠธ์ด๋ฆ„]


๐Ÿ“ ์‹œํ€€์Šค

  • ํ…Œ์ด๋ธ” ๋‚ด์˜ ์ปฌ๋Ÿผ์ค‘ PRIMARY KEY๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ, 1๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€๋˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์‹œํ€€์Šค ํ•„์š”=> 1๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€๋˜๋Š” ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์‹œํ€€์Šค ์ด์šฉ
  • [๋ฌธ๋ฒ•]
    • ์‹œํ€€์Šค CREATE SEQUENCE ์‹œํ€€์Šค ์ด๋ฆ„
    • START WITH ์ˆซ์ž : ์‹œ์ž‘ ๊ฐ’, ์‹œ์ž‘ ๊ฐ’์€ ์ ˆ๋Œ€ ์ตœ์†Œ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ์ˆ˜ ์—†์Œ
    • INCREMENT BY ์ˆซ์ž : ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฐ’
    • MAXVALUE ์ˆซ์ž OR NOMAXVALUE : ์‹œํ€€์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊ฐ’. ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ NOMAXVALUE์ผ ๊ฒฝ์šฐ 10์˜ 27์Šน.
    • MINVALUE ์ˆซ์ž OR NOMINVALUE : ์‹œํ€€์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ๊ฐ’. ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ NOMINVALUE์ผ ๊ฒฝ์šฐ 1.
    • CYCLE OR NOCYCLE : ์ตœ๋Œ€ ํ˜น์€ ์ตœ์†Œ๊ฐ’๊นŒ์ง€ ๊ฐˆ ๊ฒฝ์šฐ ๋‹ค์‹œ ์ตœ์†Œ๊ฐ’๋ถ€ํ„ฐ ์ˆœํ™˜ํ•œ๋‹ค.
    • CACHE ์ˆซ์ž OR NOCACHE : ์‹œํ€€์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ. (๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ํ–ฅ์ƒ๋จ)
    • NEXTVAL : ๋‹ค์Œ ์‹œํ€€์Šค ๊ฐ’
    • CURRVAL : ํ˜„์žฌ ์‹œํ€€์Šค ๊ฐ’

 

 

--ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE TEST_TABLE20(

IDX NUMBER CONSTRAINT TEST_TABLE20_IDX_PK PRIMARY KEY,

NUMBER_DATA NUMBER NOT NULL

);

 

--์‹œํ€€์Šค ์ƒ์„ฑ

CREATE SEQUENCE TEST_SEQ1

START WITH 1

INCREMENT BY 1

MINVALUE 0;

 

--DATA INSERT

INSERT INTO TEST_TABLE20(IDX, NUMBER_DATA) VALUES(TEST_SEQ1.NEXTVAL,100);

INSERT INTO TEST_TABLE20(IDX, NUMBER_DATA) VALUES(TEST_SEQ1.NEXTVAL,200);

SELECT * FROM TEST_TABLE20;

 

--์‹œํ€€์Šค ์ œ๊ฑฐ ์‹œ,

DROP DROP SEQUENCE TEST_SEQ1;

 

 

 

--ํ˜„์žฌ ์‹œํ€€์Šค ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

SELECT TEST_SEQ1.CURRVAL FROM DUAL;

 


๐Ÿ“ ์ธ๋ฑ์Šค

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฒ€์ƒ‰์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ด
  • ๋‹จ์  : ์ถ”๊ฐ€์ ์ธ ๊ธฐ์–ต๊ณต๊ฐ„์ด ํ•„์š”, ์ธ๋ฑ์Šค ์ƒ์„ฑ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆผ ,INSERT, UPDATE, DELETE์™€ ๊ฐ™์€ ๋ณ€๊ฒฝ์ž‘์—…์ด ์ž์ฃผ ์ผ์–ด๋‚˜๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
  • Oracle DataBase๋Š” ํ…Œ์ด๋ธ” ๋‚ด์˜ PRIMARY KEY ์ƒ์„ฑ์‹œ, ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์„ธํŒ…๋จ
  • SO, ๊ฒ€์ƒ‰์‹œ PRIMARY KEY ๋ฅผ ์ด์šฉํ•˜๋ฉด ์†๋„๊ฐ€ ๋†’์•„์ง
  • WHERE ์กฐ๊ฑด์ ˆ๋กœ ์ž์ฃผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๊ฒ€์ƒ‰ ์†๋„ ๋” ํ–ฅ์ƒ๋œ๋‹ค.

 

--์ธ๋ฑ์Šค ์กฐํšŒํ•˜๊ธฐ

SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME FROM USER_IND_COLUMNS;

 


๐Ÿ“ ๋ทฐ

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”
  • ๋ทฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ๋ฌธ์„ ์ €์žฅํ•ด๋‘๊ณ  ๋ทฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๊ทธ ์ฟผ๋ฆฌ๋ฌธ์ด ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋Š” ์›๋ฆฌ.
  • ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฌธ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์˜ ์šฉ์ด์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • ์ฃผ์˜ : ํ•œ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ JOIN ํ•ด์„œ VIEW๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ, VIEW๋กœ ๋ฐ์ดํ„ฐ๋ฅผ INSERT ํ•  ์ˆ˜ ์—†์Œ.VIEW๋กœ ๋ฐ์ดํ„ฐ๋ฅผ INSERT, UPDATE, DELETEํ•  ๊ฒฝ์šฐ , ํ•ด๋‹น VIEW๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์–ด์•ผํ•จ.
  • ๋ทฐ ์ƒ์„ฑ ๊ถŒํ•œ ์„ค์ • : ์ผ๋ฐ˜ ๊ณ„์ •์˜ ๊ฒฝ์šฐ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ทฐ ์ƒ์„ฑ ๊ถŒํ•œ์„ ์„ค์ •ํ•ด์ค˜์•ผํ•จ.์‹œ์Šคํ…œ๊ณ„์ •์œผ๋กœ DB์— ์ ‘์†ํ•œ ํ›„, GRANT CREATE VIEW TO [๊ณ„์ •์ด๋ฆ„]

 

 

 

--๋ทฐ ์ƒ์„ฑํ•˜๊ธฐ

CREATE VIEW [๋ทฐ์ด๋ฆ„] AS [์„œ๋ธŒ์ฟผ๋ฆฌ]

 

--์‚ฌ์›์˜ ์‚ฌ์›๋ฒˆํ˜ธ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ๊ทผ๋ฌด๋ถ€์„œ์ด๋ฆ„, ๊ทผ๋ฌด์ง€์—ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ทฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

CREATE VIEW EMP_DEPT_VIEW

AS

SELECT A1.EMPNO, A1.ENAME, A2.DNAME, A2.LOC

FROM EMP A1, DEPT A2

WHERE A1.DEPTNO = A2.DEPTNO;

 

--๋ทฐ ์กฐํšŒํ•˜๊ธฐ

SELECT * FROM EMP_DEPT_VIEW;

 

--๋ทฐ๋กœ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

--๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ INSERT, UPDATE, DELETEํ•  ๊ฒฝ์šฐ , ํ•ด๋‹น VIEW๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์–ด์•ผํ•จ.

CREATE VIEW EMP200_VIEW

AS SELECT EMPNO, ENAME, SAL

FROM EMP100;

 

INSERT INTO EMP200_VIEW (EMPNO, ENAME, SAL) VALUES (7000, '์ œ๋‹ˆ', 2000);