Search
moon
sun

23.DML ยท TCL ยท DDL ยท DCL

โ€ข
INSERT ยท UPDATE ยท DELETE ยท MERGE ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
COMMIT ยท ROLLBACK ยท SAVEPOINT ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
DELETE vs TRUNCATE vs DROP ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
DDL์ด AUTO COMMIT ๋˜์–ด ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ์„ ์•ˆ๋‹ค.
โ€ข
CREATE/ALTER/DROP ๊ณผ ์ œ์•ฝ์กฐ๊ฑด, GRANT/REVOKE ๋ฅผ ์ดํ•ดํ•œ๋‹ค.
๐Ÿงช ์ž„์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE DEPT_TMP ( DEPTNO NUMBER(2) PRIMARY KEY, DNAME VARCHAR2(20), LOC VARCHAR2(20) ); CREATE TABLE EMP_TMP ( EMPNO NUMBER(4) PRIMARY KEY, ENAME VARCHAR2(20), SAL NUMBER(7), DEPTNO NUMBER(2) );
SQL
๋ณต์‚ฌ

1๋ถ€. DML โ€” ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด

1. INSERT โ€” ํ–‰ ์ถ”๊ฐ€ โญโญ

1) ํ•œ ํ–‰์”ฉ ์ž…๋ ฅ

-- ============================================================ -- ใ€์ดํ•ด์šฉ ์˜ˆ์ œใ€‘ ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•ด์„œ ์ž…๋ ฅ -- ============================================================ INSERT INTO DEPT_TMP (DEPTNO, DNAME, LOC) -- ์ž…๋ ฅํ•  ์ปฌ๋Ÿผ ๋ช…์‹œ VALUES (10, '๊ฒฝ๋ฆฌ๋ถ€', '์„œ์šธ'); -- ์ˆœ์„œ๋Œ€๋กœ ๊ฐ’ -- ์ปฌ๋Ÿผ์„ ์ƒ๋žตํ•˜๋ฉด 'ํ…Œ์ด๋ธ”์— ์ •์˜๋œ ์ˆœ์„œ๋Œ€๋กœ' ๋ชจ๋“  ๊ฐ’์„ ์ค˜์•ผ ํ•œ๋‹ค INSERT INTO DEPT_TMP VALUES (20, '์—ฐ๊ตฌ๋ถ€', '๋Œ€์ „'); -- (DEPTNO, DNAME, LOC) ์ˆœ -- โ†’ 2๊ฑด ์ž…๋ ฅ๋จ SELECT * FROM DEPT_TMP; -- DEPTNO DNAME LOC -- ------ ------ ---- -- 10 ๊ฒฝ๋ฆฌ๋ถ€ ์„œ์šธ -- 20 ์—ฐ๊ตฌ๋ถ€ ๋Œ€์ „
SQL
๋ณต์‚ฌ

2) ์ผ๋ถ€ ์ปฌ๋Ÿผ๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” NULL

-- LOC ๋ฅผ ์•ˆ ๋„ฃ์œผ๋ฉด NULL ์ด ๋“ค์–ด๊ฐ„๋‹ค (06๊ฐ•) INSERT INTO DEPT_TMP (DEPTNO, DNAME) VALUES (30, '์˜์—…๋ถ€'); -- DEPTNO DNAME LOC -- ------ ------ ------ -- 30 ์˜์—…๋ถ€ (NULL) โ† ์ƒ๋žตํ•œ ์ปฌ๋Ÿผ์€ NULL -- -- โš ๏ธ NOT NULL ์ด๋‚˜ PK ์ปฌ๋Ÿผ์„ ์ƒ๋žตํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค INSERT INTO DEPT_TMP (DNAME) VALUES ('์ด๋ฌด๋ถ€'); -- ORA-01400: cannot insert NULL into ("...".DEPT_TMP.DEPTNO) โ† PK ๋ˆ„๋ฝ
SQL
๋ณต์‚ฌ

3) INSERT ~ SELECT โ€” ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ํ†ต์งธ๋กœ ์ž…๋ ฅ โญ

-- ============================================================ -- ใ€์‹œํ—˜์šฉ ์˜ˆ์ œใ€‘ EMP ์›๋ณธ์—์„œ ์ฝ์–ด์™€ EMP_TMP ๋กœ ๋ณต์‚ฌ (์›๋ณธ์€ ์ฝ๊ธฐ๋งŒ) โ˜… -- ============================================================ INSERT INTO EMP_TMP (EMPNO, ENAME, SAL, DEPTNO) SELECT EMPNO, ENAME, SAL, DEPTNO -- EMP ๋ฅผ ์กฐํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ FROM EMP WHERE DEPTNO = 10; -- 10๋ฒˆ ๋ถ€์„œ ์‚ฌ์›๋งŒ -- โ†’ EMP ์˜ 10๋ฒˆ ๋ถ€์„œ 3๋ช…์ด EMP_TMP ์— ๋ณต์‚ฌ๋จ (EMP ์›๋ณธ์€ ๊ทธ๋Œ€๋กœ) SELECT * FROM EMP_TMP; -- EMPNO ENAME SAL DEPTNO -- ----- ------ ---- ------ -- 7782 CLARK 2450 10 -- 7839 KING 5000 10 -- 7934 MILLER 1300 10 -- -- โญ VALUES ์—†์ด SELECT ๋ฅผ ๋ถ™์ด๋ฉด ์—ฌ๋Ÿฌ ํ–‰์„ ํ•œ ๋ฒˆ์— ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
SQL
๋ณต์‚ฌ

2. UPDATE โ€” ํ–‰ ์ˆ˜์ • โญโญ

1) WHERE ๋กœ ๋Œ€์ƒ์„ ์ง€์ •

-- ============================================================ -- ใ€์ดํ•ด์šฉ ์˜ˆ์ œใ€‘ ํŠน์ • ์‚ฌ์›์˜ ๊ธ‰์—ฌ๋ฅผ ์ธ์ƒ -- ============================================================ UPDATE EMP_TMP SET SAL = SAL * 1.1 -- ๊ธ‰์—ฌ๋ฅผ 10% ์ธ์ƒ WHERE EMPNO = 7934; -- MILLER ๋งŒ -- โ†’ MILLER ์˜ SAL ์ด 1300 โ†’ 1430 -- ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๋™์‹œ ์ˆ˜์ • UPDATE EMP_TMP SET SAL = 3000, DEPTNO = 20 WHERE EMPNO = 7782;
SQL
๋ณต์‚ฌ

2) โš ๏ธ WHERE ๋ฅผ ๋น ๋œจ๋ฆฌ๋ฉด ์ „์ฒด๊ฐ€ ๋ฐ”๋€๋‹ค โญโญโญ

-- ============================================================ -- ใ€์‹œํ—˜์šฉ ์˜ˆ์ œใ€‘ WHERE ์—†๋Š” UPDATE = ๋Œ€ํ˜• ์‚ฌ๊ณ  โ˜…โ˜…โ˜… -- ============================================================ UPDATE EMP_TMP SET SAL = 0; -- WHERE ๊ฐ€ ์—†๋‹ค! -- โ†’ EMP_TMP ์˜ '๋ชจ๋“  ์‚ฌ์›' ๊ธ‰์—ฌ๊ฐ€ 0 ์ด ๋œ๋‹ค โš ๏ธ -- ์‹ค๋ฌด์—์„œ WHERE ๋ฅผ ๋น ๋œจ๋ฆฐ UPDATE ๋Š” ๊ฐ€์žฅ ํ”ํ•œ ๋Œ€ํ˜• ์‚ฌ๊ณ ๋‹ค. -- -- โญ ๋‹คํ–‰ํžˆ ์•„์ง COMMIT ์ „์ด๋ฉด ROLLBACK ์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค (5์ ˆ). -- โ†’ ์ด๋ž˜์„œ UPDATE/DELETE ํ›„ COMMIT ์€ ์‹ ์ค‘ํ•ด์•ผ ํ•œ๋‹ค. ROLLBACK; -- ์›์ƒ ๋ณต๊ตฌ
SQL
๋ณต์‚ฌ

3) ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ UPDATE

-- 20๋ฒˆ ๋ถ€์„œ์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋กœ ํŠน์ • ์‚ฌ์›์˜ ๊ธ‰์—ฌ๋ฅผ ๋งž์ถ˜๋‹ค UPDATE EMP_TMP SET SAL = ( SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 20 ) -- ์„œ๋ธŒ์ฟผ๋ฆฌ(15๊ฐ•) WHERE EMPNO = 7934;
SQL
๋ณต์‚ฌ

3. DELETE vs TRUNCATE vs DROP โญโญโญ

๐Ÿ”ฅ ์ด ๋‹จ์› ์ตœ๋‹ค ์ถœ์ œ์ž…๋‹ˆ๋‹ค.

1) DELETE โ€” ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰ ์‚ญ์ œ (DML)

-- ============================================================ -- ใ€์ดํ•ด์šฉ ์˜ˆ์ œใ€‘ DELETE ๋Š” WHERE ๋กœ ๋Œ€์ƒ ์ง€์ • -- ============================================================ DELETE FROM EMP_TMP WHERE EMPNO = 7934; -- MILLER ๋งŒ ์‚ญ์ œ -- โš ๏ธ WHERE ์—†์œผ๋ฉด ์ „์ฒด ํ–‰ ์‚ญ์ œ (๊ตฌ์กฐ๋Š” ๋‚จ์Œ) DELETE FROM EMP_TMP; -- ๋ชจ๋“  ํ–‰ ์‚ญ์ œ -- โ†’ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค ์ง€์›Œ์ง€์ง€๋งŒ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ์œ ์ง€ -- โ†’ ์•„์ง COMMIT ์ „์ด๋ฉด ROLLBACK ๊ฐ€๋Šฅ! ROLLBACK;
SQL
๋ณต์‚ฌ

2) ์„ธ ๋ช…๋ น ์ด์ •๋ฆฌ โญโญโญ

๊ตฌ๋ถ„
DELETE
TRUNCATE
DROP
๋ถ„๋ฅ˜
DML
DDL
DDL
์‚ญ์ œ ๋Œ€์ƒ
ํ–‰ (WHERE ๊ฐ€๋Šฅ)
์ „์ฒด ํ–‰
ํ…Œ์ด๋ธ” ์ž์ฒด
์กฐ๊ฑด ์ง€์ •
โœ… ๊ฐ€๋Šฅ
โŒ ๋ถˆ๊ฐ€
โŒ ๋ถˆ๊ฐ€
๋กค๋ฐฑ
โœ… ๊ฐ€๋Šฅ
โŒ ๋ถˆ๊ฐ€ (์ž๋™ ์ปค๋ฐ‹)
โŒ ๋ถˆ๊ฐ€
ํ…Œ์ด๋ธ” ๊ตฌ์กฐ
์œ ์ง€
์œ ์ง€
์‚ญ์ œ๋จ
์†๋„
๋А๋ฆผ
๋น ๋ฆ„
๋น ๋ฆ„
AUTO COMMIT
โŒ
โœ…
โœ…
TRUNCATE TABLE EMP_TMP; -- ์ „์ฒด ํ–‰ ์‚ญ์ œ (์ฆ‰์‹œ ์ปค๋ฐ‹, ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Œ) DROP TABLE EMP_TMP; -- ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์‚ญ์ œ (๊ตฌ์กฐ๊นŒ์ง€ ์‚ฌ๋ผ์ง)
SQL
๋ณต์‚ฌ
โš ๏ธ ์‹œํ—˜ ํ•จ์ •: TRUNCATE ์™€ DROP ์€ ์ด๋ฆ„๊ณผ ๋‹ฌ๋ฆฌ DDL ์ด๋ผ ๋กค๋ฐฑ์ด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.DELETE ๋งŒ DML ์ด๋ผ ROLLBACK ์œผ๋กœ ๋˜์‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. MERGE โ€” ์žˆ์œผ๋ฉด ์ˆ˜์ •, ์—†์œผ๋ฉด ์‚ฝ์ž… โญ

-- ============================================================ -- ใ€์‹œํ—˜์šฉ ์˜ˆ์ œใ€‘ MERGE = UPSERT (UPDATE + INSERT) โ˜… -- "๊ทธ ๋ถ€์„œ๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ , ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ถ”๊ฐ€" -- ============================================================ MERGE INTO DEPT_TMP D USING ( SELECT 40 AS DEPTNO, '๊ธฐํš๋ถ€' AS DNAME, '๋ถ€์‚ฐ' AS LOC FROM DUAL ) S ON ( D.DEPTNO = S.DEPTNO ) -- ์ด ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด(=์ด๋ฏธ ์žˆ์œผ๋ฉด) WHEN MATCHED THEN -- ์žˆ์œผ๋ฉด โ†’ UPDATE UPDATE SET D.DNAME = S.DNAME, D.LOC = S.LOC WHEN NOT MATCHED THEN -- ์—†์œผ๋ฉด โ†’ INSERT INSERT (DEPTNO, DNAME, LOC) VALUES (S.DEPTNO, S.DNAME, S.LOC); -- -- โญ 40๋ฒˆ ๋ถ€์„œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ INSERT, ์ด๋ฏธ ์žˆ์œผ๋ฉด ์ด๋ฆ„ยท์œ„์น˜๋ฅผ UPDATE. -- "์žˆ์œผ๋ฉด ์ˆ˜์ • ์—†์œผ๋ฉด ์‚ฝ์ž…" ์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
SQL
๋ณต์‚ฌ

2๋ถ€. TCL โ€” ํŠธ๋žœ์žญ์…˜ ์ œ์–ด์–ด

5. COMMIT / ROLLBACK โญโญโญ

1) ํŠธ๋žœ์žญ์…˜์˜ ํ™•์ •๊ณผ ์ทจ์†Œ

๋ช…๋ น
์˜๋ฏธ
COMMIT
ํŠธ๋žœ์žญ์…˜์„ ํ™•์ • (์˜๊ตฌ ์ €์žฅ)
ROLLBACK
ํŠธ๋žœ์žญ์…˜์„ ์ทจ์†Œ (๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ์‹œ์ ์œผ๋กœ)
-- ============================================================ -- ใ€์ดํ•ด์šฉ ์˜ˆ์ œใ€‘ COMMIT ์ „์ด๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค โ˜… -- ============================================================ INSERT INTO DEPT_TMP VALUES (50, 'ํ™๋ณด๋ถ€', '์ธ์ฒœ'); SELECT * FROM DEPT_TMP; -- 50๋ฒˆ ๋ถ€์„œ ๋ณด์ž„ (์•„์ง ๋‚ด ์„ธ์…˜์—์„œ๋งŒ) ROLLBACK; -- ์ทจ์†Œ! SELECT * FROM DEPT_TMP; -- 50๋ฒˆ ๋ถ€์„œ ์‚ฌ๋ผ์ง โ† COMMIT ์ „์ด๋ผ ๋˜๋Œ์•„๊ฐ -- ์ด๋ฒˆ์—” ์ปค๋ฐ‹์„ ํ•ด๋ณด์ž INSERT INTO DEPT_TMP VALUES (50, 'ํ™๋ณด๋ถ€', '์ธ์ฒœ'); COMMIT; -- ํ™•์ •! ROLLBACK; -- ์ด๋ฏธ ์ปค๋ฐ‹ํ–ˆ์œผ๋ฏ€๋กœ ์•„๋ฌด ํšจ๊ณผ ์—†์Œ SELECT * FROM DEPT_TMP; -- 50๋ฒˆ ๋ถ€์„œ ๊ทธ๋Œ€๋กœ ์žˆ์Œ โœ… -- -- โญ COMMIT ์ „ โ†’ ROLLBACK ๊ฐ€๋Šฅ / COMMIT ํ›„ โ†’ ROLLBACK ๋ถˆ๊ฐ€ -- 05๊ฐ•์—์„œ ๋ฐฐ์šด ํŠธ๋žœ์žญ์…˜ ์›์ž์„ฑ(์ „๋ถ€ or ์ทจ์†Œ)์ด ์ด ๋ช…๋ น์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.
SQL
๋ณต์‚ฌ

6. SAVEPOINT โ€” ๋ถ€๋ถ„ ๋กค๋ฐฑ โญ

-- ============================================================ -- ใ€์‹œํ—˜์šฉ ์˜ˆ์ œใ€‘ SAVEPOINT ๋กœ ์ผ๋ถ€๋งŒ ๋˜๋Œ๋ฆฌ๊ธฐ โ˜… -- ============================================================ INSERT INTO DEPT_TMP VALUES (60, 'A๋ถ€', 'A์‹œ'); SAVEPOINT SP1; -- ์—ฌ๊ธฐ์— ์ €์žฅ์  ํ‘œ์‹œ INSERT INTO DEPT_TMP VALUES (70, 'B๋ถ€', 'B์‹œ'); SAVEPOINT SP2; -- ๋˜ ํ•˜๋‚˜์˜ ์ €์žฅ์  INSERT INTO DEPT_TMP VALUES (80, 'C๋ถ€', 'C์‹œ'); ROLLBACK TO SP2; -- SP2 ์‹œ์ ์œผ๋กœ ๋กค๋ฐฑ -- โ†’ 80๋ฒˆ(C๋ถ€)๋งŒ ์ทจ์†Œ. 60๋ฒˆ, 70๋ฒˆ์€ ๋‚จ๋Š”๋‹ค. ROLLBACK TO SP1; -- SP1 ์‹œ์ ์œผ๋กœ ๋กค๋ฐฑ -- โ†’ 70๋ฒˆ๋„ ์ทจ์†Œ. 60๋ฒˆ๋งŒ ๋‚จ๋Š”๋‹ค. -- -- โญ ROLLBACK TO ์ €์žฅ์  โ†’ ๊ทธ ์ €์žฅ์  ์ดํ›„ ์ž‘์—…๋งŒ ์ทจ์†Œํ•œ๋‹ค. -- ์ „์ฒด ROLLBACK ๊ณผ ๋‹ฌ๋ฆฌ '๋ถ€๋ถ„ ์ทจ์†Œ' ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
SQL
๋ณต์‚ฌ

7. DDL์€ AUTO COMMIT โ€” ๋กค๋ฐฑ ํ•จ์ • โญโญ

-- ============================================================ -- ใ€์‹œํ—˜์šฉ ์˜ˆ์ œใ€‘ DDL ์ด ์ด์ „ DML ๊นŒ์ง€ ์ปค๋ฐ‹ํ•ด๋ฒ„๋ฆฐ๋‹ค โ˜…โ˜…โ˜… -- ============================================================ DELETE FROM DEPT_TMP WHERE DEPTNO = 60; -- DML (์•„์ง ์ปค๋ฐ‹ ์•ˆ ํ•จ) CREATE TABLE TEMP1 (A NUMBER); -- โš ๏ธ DDL ์‹คํ–‰! -- โ†’ ์ด ์ˆœ๊ฐ„ ์•ž์˜ DELETE ๊นŒ์ง€ '์ž๋™ ์ปค๋ฐ‹(AUTO COMMIT)' ๋œ๋‹ค ROLLBACK; -- ๋˜๋Œ๋ฆฌ๋ ค ํ•˜์ง€๋งŒ... -- โ†’ ์ด๋ฏธ ๋Šฆ์—ˆ๋‹ค! DELETE ๋Š” CREATE ๋•Œ๋ฌธ์— ์ด๋ฏธ ์ปค๋ฐ‹๋จ. 60๋ฒˆ์€ ์•ˆ ๋Œ์•„์˜จ๋‹ค โš ๏ธ -- -- โญ ์‹œํ—˜ ํฌ์ธํŠธ -- DDL(CREATE/ALTER/DROP/TRUNCATE)์€ ์‹คํ–‰ ์ฆ‰์‹œ AUTO COMMIT ๋œ๋‹ค. -- ๊ทธ๋ž˜์„œ DDL ์•ž์— ์žˆ๋˜ DML ์ž‘์—…๊นŒ์ง€ ํ•จ๊ป˜ ์ปค๋ฐ‹๋˜์–ด ๋กค๋ฐฑํ•  ์ˆ˜ ์—†๋‹ค. -- โ†’ DML ์ž‘์—… ์ค‘์—๋Š” ์‹ค์ˆ˜๋กœ DDL ์„ ์„ž์ง€ ์•Š๋„๋ก ์ฃผ์˜!
SQL
๋ณต์‚ฌ

3๋ถ€. DDL โ€” ๋ฐ์ดํ„ฐ ์ •์˜์–ด

8. CREATE / ALTER / DROP โญโญ

1) ํ…Œ์ด๋ธ” ์ƒ์„ฑยท๋ณ€๊ฒฝยท์‚ญ์ œ

-- CREATE : ํ…Œ์ด๋ธ” ์ƒ์„ฑ CREATE TABLE MEMBER_TMP ( ID NUMBER, NAME VARCHAR2(20) ); -- ALTER : ๊ตฌ์กฐ ๋ณ€๊ฒฝ ALTER TABLE MEMBER_TMP ADD (EMAIL VARCHAR2(50)); -- ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ALTER TABLE MEMBER_TMP MODIFY (NAME VARCHAR2(30)); -- ์ปฌ๋Ÿผ ํƒ€์ž… ๋ณ€๊ฒฝ ALTER TABLE MEMBER_TMP RENAME COLUMN NAME TO MNAME; -- ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ ALTER TABLE MEMBER_TMP DROP COLUMN EMAIL; -- ์ปฌ๋Ÿผ ์‚ญ์ œ -- DROP : ํ…Œ์ด๋ธ” ์‚ญ์ œ DROP TABLE MEMBER_TMP;
SQL
๋ณต์‚ฌ
๋ช…๋ น
๊ธฐ๋Šฅ
CREATE TABLE
ํ…Œ์ด๋ธ” ์ƒ์„ฑ
ALTER TABLE ~ ADD
์ปฌ๋Ÿผ ์ถ”๊ฐ€
ALTER TABLE ~ MODIFY
์ปฌ๋Ÿผ ํƒ€์ž…/ํฌ๊ธฐ ๋ณ€๊ฒฝ
ALTER TABLE ~ DROP COLUMN
์ปฌ๋Ÿผ ์‚ญ์ œ
ALTER TABLE ~ RENAME COLUMN
์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ
DROP TABLE
ํ…Œ์ด๋ธ” ์‚ญ์ œ
RENAME
ํ…Œ์ด๋ธ”๋ช… ๋ณ€๊ฒฝ

9. ์ œ์•ฝ์กฐ๊ฑด โญโญโญ

1) ์—ฌ์„ฏ ๊ฐ€์ง€ ์ œ์•ฝ์กฐ๊ฑด

์ œ์•ฝ์กฐ๊ฑด
์˜๋ฏธ
NULL
PRIMARY KEY
๊ธฐ๋ณธํ‚ค (UNIQUE + NOT NULL)
๋ถˆ๊ฐ€
FOREIGN KEY
์™ธ๋ž˜ํ‚ค (๋ถ€๋ชจ ์ฐธ์กฐ)
๊ฐ€๋Šฅ
UNIQUE
์ค‘๋ณต ๋ถˆ๊ฐ€
๊ฐ€๋Šฅ (์—ฌ๋Ÿฌ ๊ฐœ)
NOT NULL
NULL ๋ถˆ๊ฐ€
๋ถˆ๊ฐ€
CHECK
๊ฐ’์˜ ์กฐ๊ฑด ์ง€์ •
โ€”
DEFAULT
๊ธฐ๋ณธ๊ฐ’ (์ œ์•ฝ์€ ์•„๋‹ˆ๋‚˜ ํ•จ๊ป˜ ๋‹ค๋ฃธ)
โ€”
-- ============================================================ -- ใ€์ดํ•ด์šฉ ์˜ˆ์ œใ€‘ ์ œ์•ฝ์กฐ๊ฑด์„ ๋ถ™์—ฌ ํ…Œ์ด๋ธ” ์ƒ์„ฑ -- ============================================================ CREATE TABLE EMP_C ( EMPNO NUMBER(4) PRIMARY KEY, -- ๊ธฐ๋ณธํ‚ค ENAME VARCHAR2(20) NOT NULL, -- ํ•„์ˆ˜ EMAIL VARCHAR2(50) UNIQUE, -- ์ค‘๋ณต ๋ถˆ๊ฐ€ SAL NUMBER(7) DEFAULT 0, -- ๊ธฐ๋ณธ๊ฐ’ 0 GENDER CHAR(1) CHECK (GENDER IN ('M','F')), -- M ๋˜๋Š” F ๋งŒ DEPTNO NUMBER(2), CONSTRAINT EMP_C_FK FOREIGN KEY (DEPTNO) -- ์™ธ๋ž˜ํ‚ค REFERENCES DEPT_TMP(DEPTNO) );
SQL
๋ณต์‚ฌ

2) ์ œ์•ฝ์กฐ๊ฑด์ด ์‹ค์ œ๋กœ ๋ง‰๋Š” ์žฅ๋ฉด โญ

-- โŒ CHECK ์œ„๋ฐ˜ : GENDER ์— 'X' INSERT INTO EMP_C VALUES (1, '๊น€์ฒ ์ˆ˜', 'a@a.com', 100, 'X', 10); -- ORA-02290: check constraint violated โ† 'M','F' ๋งŒ ํ—ˆ์šฉ -- โŒ FOREIGN KEY ์œ„๋ฐ˜ : DEPT_TMP ์— ์—†๋Š” ๋ถ€์„œ๋ฒˆํ˜ธ 99 INSERT INTO EMP_C VALUES (1, '๊น€์ฒ ์ˆ˜', 'a@a.com', 100, 'M', 99); -- ORA-02291: integrity constraint violated - parent key not found -- โ†’ ๋ถ€๋ชจ(DEPT_TMP)์— 99๋ฒˆ ๋ถ€์„œ๊ฐ€ ์—†์–ด์„œ ์ž…๋ ฅ ๋ถˆ๊ฐ€ (์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ, 02๊ฐ•) -- โŒ NOT NULL ์œ„๋ฐ˜ : ENAME ์„ NULL INSERT INTO EMP_C (EMPNO, ENAME) VALUES (1, NULL); -- ORA-01400: cannot insert NULL -- โญ 03๊ฐ•์—์„œ ๋ฐฐ์šด PK/FK/์ œ์•ฝ์กฐ๊ฑด์ด ์‹ค์ œ๋กœ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ง‰์•„์ค€๋‹ค. -- ์ด๊ฒƒ์ด '๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ(Integrity)' ์ด๋‹ค.
SQL
๋ณต์‚ฌ

3) ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ยท์‚ญ์ œ (ALTER)

-- ์ด๋ฏธ ๋งŒ๋“  ํ…Œ์ด๋ธ”์— ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ALTER TABLE EMP_C ADD CONSTRAINT EMP_C_UK UNIQUE (EMAIL); -- ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ ALTER TABLE EMP_C DROP CONSTRAINT EMP_C_UK;
SQL
๋ณต์‚ฌ

4๋ถ€. DCL โ€” ๋ฐ์ดํ„ฐ ์ œ์–ด์–ด

10. GRANT / REVOKE โญ

-- GRANT : ๊ถŒํ•œ ๋ถ€์—ฌ GRANT SELECT, INSERT ON EMP_TMP TO SCOTT; -- SCOTT ์—๊ฒŒ ์กฐํšŒยท์ž…๋ ฅ ๊ถŒํ•œ GRANT ALL ON EMP_TMP TO SCOTT; -- ๋ชจ๋“  ๊ถŒํ•œ -- REVOKE : ๊ถŒํ•œ ํšŒ์ˆ˜ REVOKE INSERT ON EMP_TMP FROM SCOTT; -- ์ž…๋ ฅ ๊ถŒํ•œ ํšŒ์ˆ˜
SQL
๋ณต์‚ฌ
๋ช…๋ น
๊ธฐ๋Šฅ
GRANT
๊ถŒํ•œ์„ ๋ถ€์—ฌ
REVOKE
๊ถŒํ•œ์„ ํšŒ์ˆ˜
๊ถŒํ•œ ์ข…๋ฅ˜
๋Œ€์ƒ
SELECT INSERT UPDATE DELETE
ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์กฐ์ž‘
ALL
๋ชจ๋“  ๊ถŒํ•œ

11. ์ถœ์ œ ํฌ์ธํŠธ ํ•œ๋ˆˆ์— ์ •๋ฆฌ

#
๊ผญ ์™ธ์šธ ๊ฒƒ
ํ•ต์‹ฌ
1
DML
INSERT UPDATE DELETE MERGE
2
INSERT ~ SELECT
์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ํ†ต์งธ๋กœ ์ž…๋ ฅ
3
WHERE ์—†๋Š” UPDATE/DELETE
์ „์ฒด ๋ณ€๊ฒฝ/์‚ญ์ œ (์‚ฌ๊ณ ) โญ
4
DELETE
DML, ์กฐ๊ฑด O, ๋กค๋ฐฑ ๊ฐ€๋Šฅ
5
TRUNCATE
DDL, ์ „์ฒด ํ–‰, ๋กค๋ฐฑ ๋ถˆ๊ฐ€ โญ
6
DROP
DDL, ํ…Œ์ด๋ธ” ์ž์ฒด ์‚ญ์ œ
7
MERGE
UPSERT (์žˆ์œผ๋ฉด ์ˆ˜์ •, ์—†์œผ๋ฉด ์‚ฝ์ž…)
8
COMMIT
ํŠธ๋žœ์žญ์…˜ ํ™•์ • (๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Œ)
9
ROLLBACK
์ปค๋ฐ‹ ์ „์ด๋ฉด ์ทจ์†Œ ๊ฐ€๋Šฅ
10
SAVEPOINT
๋ถ€๋ถ„ ๋กค๋ฐฑ (ROLLBACK TO)
11
DDL AUTO COMMIT
DDL ์‹คํ–‰ ์‹œ ์ด์ „ DML๊นŒ์ง€ ์ปค๋ฐ‹ โญโญ
12
DDL ์ข…๋ฅ˜
CREATE ALTER DROP RENAME TRUNCATE
13
ALTER
์ปฌ๋Ÿผ ADD/MODIFY/DROP/RENAME
14
์ œ์•ฝ์กฐ๊ฑด 6์ข…
PK/FK/UNIQUE/NOT NULL/CHECK/DEFAULT โญ
15
PK
UNIQUE + NOT NULL
16
FK
๋ถ€๋ชจ์— ์—†๋Š” ๊ฐ’ ์ž…๋ ฅ ๋ถˆ๊ฐ€ (์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ)
17
UNIQUE์™€ NULL
UNIQUE ์ปฌ๋Ÿผ์— NULL ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ
18
DCL
GRANT(๋ถ€์—ฌ) / REVOKE(ํšŒ์ˆ˜)

12. ํ™•์ธ ๋ฌธ์ œ

Q1. UPDATE EMP_TMP SET SAL = 0; ์„ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?
์ •๋‹ต ๋ณด๊ธฐ
Q2. DELETE, TRUNCATE, DROP ์„ ๋กค๋ฐฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋กœ ๊ตฌ๋ถ„ํ•˜์‹œ์˜ค.
์ •๋‹ต ๋ณด๊ธฐ
Q3. DELETE ์™€ TRUNCATE ์˜ ์ฐจ์ด 3๊ฐ€์ง€๋Š”?
์ •๋‹ต ๋ณด๊ธฐ
Q4. ๋‹ค์Œ ์‹คํ–‰ ํ›„ ROLLBACK ํ•˜๋ฉด DELETE๋Š” ์ทจ์†Œ๋˜๋Š”๊ฐ€?
DELETE FROM EMP_TMP WHERE EMPNO = 7934; CREATE TABLE T (A NUMBER); ROLLBACK;
SQL
๋ณต์‚ฌ
์ •๋‹ต ๋ณด๊ธฐ
Q5. MERGE ๋ฌธ์€ ๋ฌด์—‡์„ ํ•˜๋Š”๊ฐ€?
์ •๋‹ต ๋ณด๊ธฐ
Q6. SAVEPOINT SP1 ํ›„ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๊ณ  ROLLBACK TO SP1 ์„ ์‹คํ–‰ํ•˜๋ฉด?
์ •๋‹ต ๋ณด๊ธฐ
Q7. PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด์€ ์–ด๋–ค ์ œ์•ฝ์„ ํฌํ•จํ•˜๋Š”๊ฐ€?
์ •๋‹ต ๋ณด๊ธฐ
Q8. FOREIGN KEY ๊ฐ€ ๊ฑธ๋ฆฐ ์ปฌ๋Ÿผ์— ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ์—†๋Š” ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด?
์ •๋‹ต ๋ณด๊ธฐ
Q9. GENDER CHAR(1) CHECK (GENDER IN ('M','F')) ์ปฌ๋Ÿผ์— 'X' ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด?
์ •๋‹ต ๋ณด๊ธฐ
Q10. GRANT ์™€ REVOKE ๋Š” ๊ฐ๊ฐ ๋ฌด์—‡์„ ํ•˜๋Š”๊ฐ€?
์ •๋‹ต ๋ณด๊ธฐ