โข
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 ๋ ๊ฐ๊ฐ ๋ฌด์์ ํ๋๊ฐ?
์ ๋ต ๋ณด๊ธฐ





๊ฐ๋ฅ
๋ถ๊ฐ

