[DB] SQL ๋ช…๋ น์–ด ์ •๋ฆฌ: DDL, DML, DQL, DCL, TCL

2025. 3. 9. 01:03ยท๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๐Ÿ“Œ SQL

Structured Query Language(๊ตฌ์กฐ์  ์ฟผ๋ฆฌ ์–ธ์–ด)์˜ ์ค„์ž„๋ง๋กœ,

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค.


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ, ๋ฐ์ดํ„ฐ ์ €์žฅ์ด๋‚˜ ์กฐํšŒ, ์‚ญ์ œ, ์ˆ˜์ •, ๊ถŒํ•œ ์„ค์ • ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
SQL ๋ช…๋ น์–ด์—๋Š” DDL, DML, DCL, DQL, TCL์ด ์žˆ๊ณ  ์ด ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ ๋ช…๋ น์–ด๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.

โœ… DDL

DDL์€ Data Definition Language๋กœ ๋ฐ์ดํ„ฐ ์ •์˜์–ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค, ์Šคํ‚ค๋งˆ์™€ ๊ฐ™์€ "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ"๋ฅผ ์ •์˜, ๋ณ€๊ฒฝ, ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ํฌํ•จ๋œ๋‹ค.

  • CREATE
    ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์“ด๋‹ค.

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๊ด€๊ณ„(ํ…Œ์ด๋ธ”), ๋ทฐ(๊ฐ€์ƒ ํ…Œ์ด๋ธ”), ์ธ๋ฑ์Šค ๋“ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
CREATE DATABASE company;

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE company.employees (
    id INT PRIMARY KEY,
    ...
);

 

CREATE๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ…Œ์ด๋ธ”์€ 2๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

  • Base tables(base relations)
    • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ DBMS์— ์˜ํ•ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.
  • Virtual relations(views)
    • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ๊ธฐ์กด ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“  ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋‹ค.
    • ๋ฌผ๋ฆฌ์  ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๊ธฐ์กด ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
-- employees ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ๋“ค์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ด
CREATE VIEW employee_view AS
SELECT id, name FROM employees;

-- employees ํ…Œ์ด๋ธ”์—์„œ id์™€ name๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Œ
SELECT * FROM employee_view;
  • ALTER

์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด(ํ…Œ์ด๋ธ”, ๋ทฐ)์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
์ฃผ๋กœ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ •์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

-- ADD COLUMN: ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ ์ถ”๊ฐ€
ALTER TABLE employees ADD COLUMN salary INT;
-- DROP COLUMN: ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ ์‚ญ์ œ
ALTER TABLE employees DROP COLUMN salary;
-- RENAME COLUMN: ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ
ALTER TABLE employees RENAME COLUMN name TO full_name;
-- ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ
-- MySQL: MODIFY
-- PostgreSQL: ALTER TABLE
ALTER TABLE employees ALTER COLUMN age TYPE BIGINT;
  • DROP

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์™„์ „ํžˆ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
โš ๏ธ ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋Š” ๋ณต๊ตฌ๋  ์ˆ˜ ์—†๋‹ค.

-- ํ…Œ์ด๋ธ” ์‚ญ์ œ
DROP TABLE employees;

์ด๋•Œ ๋งŒ์•ฝ employees ํ…Œ์ด๋ธ”์ด ์—†๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ IF EXISTS์™€ ํ•จ๊ป˜ ์“ฐ๋ฉด ์ข‹๋‹ค.

DROP TABLE IF EXISTS employees;
  • RENAME

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
ALTER์˜ RENAME๊ณผ ๊ฐ™์€ ์—ญํ• ์ด๋‹ค.

-- ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ
RENAME TABLE old_table TO new_table;
  • TRUNCATE

ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.
DROP๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋˜๋ฉฐ ์˜ค์ง ๋ฐ์ดํ„ฐ๋“ค๋งŒ ์‚ญ์ œ๋œ๋‹ค.
"์ „์ฒด ๋ฐ์ดํ„ฐ"๊ฐ€ ํ•œ ๋ฒˆ์— ์‚ญ์ œ๋œ๋‹ค.

-- ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ
TRUNCATE TABLE employees;

 

DELETE ๋•Œ์ฒ˜๋Ÿผ ๋งŒ์•ฝ employees ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ IF EXISTS ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์“ฐ๋ฉด ์•ˆ์ „ํ•˜๋‹ค.

TRUNCATE TABLE IF EXISTS employees;

โœ… DML

Data Manipulation Language๋กœ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ํฌํ•จ๋œ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ "๋ฐ์ดํ„ฐ"๋งŒ ๋‹ค๋ฃจ๋Š” ๋ช…๋ น์–ด๋‹ค.

  • INSERT

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ(ํ–‰, row)๋ฅผ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€(์ €์žฅ)ํ•œ๋‹ค.

ํ…Œ์ด๋ธ”์— ์ž‡๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ปฌ๋Ÿผ ์ˆœ์„œ์™€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ปฌ๋Ÿผ๋ช…์„ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•  ํ•„์š” ์—†๋‹ค.

-- ํ•˜๋‚˜์˜ ํ–‰ ์ถ”๊ฐ€
INSERT INTO employees (name, department, salary)
VALUES ('Alice', 'IT', 5000);
-- VALUES: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ–‰ ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€
INSERT INTO employees (name, department, salary) 
VALUES 
    ('Bob', 'HR', 4000), 
    ('Charlie', 'Sales', 4500);
  • UPDATE

ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
WHERE ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

UPDATE employees 
SET salary = 5500 
WHERE name = 'Alice';

 

โš ๏ธ WHERE ํ‚ค์›Œ๋“œ๊ฐ€ ์—†์œผ๋ฉด ํ…Œ์ด๋ธ” ๋‚ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•˜์ž.

 -- ๋ชจ๋“  ์ง์›์˜ ๊ธ‰์—ฌ๊ฐ€ 7000์œผ๋กœ ๋ณ€๊ฒฝ๋จ
UPDATE employees SET salary = 7000; 
  • DELETE

์ €์žฅ๋œ ๋ฐ์ดํ„ฐ(ํ–‰, row)๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

DELETE FROM employees WHERE name = 'Bob';

 

โš ๏ธ WHERE ํ‚ค์›Œ๋“œ๊ฐ€ ์—†์œผ๋ฉด ํ…Œ์ด๋ธ” ๋‚ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ!! ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
TRUNCATE์™€ ๋˜‘๊ฐ™์•„ ๋ณด์ด์ง€๋งŒ, DELETE๋Š” ๋กค๋ฐฑ์œผ๋กœ ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

-- employess์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ
DELETE FROM employees; 
  • (SELECT)

์‚ฌ๋žŒ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ์กฐํšŒํ•˜๋Š” SELECT๋„ ์กฐ์ž‘์–ด๋กœ ๋ฌถ์–ด ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.
์ด ํฌ์ŠคํŒ…์—์„œ๋Š” ์ฃผ๋กœ ์ฐธ๊ณ ํ•œ [Fundamentals of Database Systems] ๊ต์žฌ๋ฅผ ๋”ฐ๋ผ ๋‹ค์Œ์— ์˜ฌ DQL๋กœ ๋ถ„๋ฅ˜ํ•˜์˜€๋‹ค.

โœ… DQL

Data Query Language๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰(์กฐํšŒ)ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ
SELECT๊ฐ€ ํ•ด๋‹น๋œ๋‹ค.


DML๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ๋งŒ ํ•œ๋‹ค.

WHERE, ORDER BY, GROUP BY ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋” ์ž์„ธํ•œ ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋ง, ์ •๋ ฌ ๊ธฐ์ค€ ๋“ฑ์˜ ์กฐ๊ฑด์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค. ์–˜๋“ค์€ ์–ธ์  ๊ฐ€ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค.

  • SELECT
-- employees ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ
SELECT * FROM employees;

-- ํŠน์ • ์ปฌ๋Ÿผ ์กฐํšŒ
SELECT name, salary FROM employees;

โœ… DCL

Data Control Language๋กœ ๋ฐ์ดํ„ฐ ์ œ์–ด ์–ธ์–ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณด์•ˆ์„ ์œ„ํ•ด
๋ฐ์ดํ„ฐ์˜ ์‚ฌ์šฉ ๋ฐ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

๊ด€๋ฆฌ์ž๊ฐ™์ด ์ตœ๊ณ  ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด์ด๊ธฐ๋„ ํ•˜๋‹ค.

  • GRANT

์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.
ํŠน์ • ์œ ์ €์—๊ฒŒ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๊ถŒ๋ฆฌ ๋˜๋Š” ์•ก์…˜์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒ๋ฆฌ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

-- user1์—๊ฒŒ employees ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ SELECT, INSERT ๊ถŒํ•œ ๋ถ€์—ฌ
GRANT SELECT, INSERT ON employees TO user1;

-- user1์—๊ฒŒ my_datebase์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒ๋ฆฌ(์ฆ‰, ๊ด€๋ฆฌ ๊ถŒํ•œ) ๋ถ€์—ฌ
GRANT ALL PRIVILEGES ON my_database.* TO user1;
  • REVOKE

์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์„ ์ œ๊ฑฐํ•œ๋‹ค.

-- user1์˜ employees ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ INSERT ๊ถŒํ•œ ์ œ๊ฑฐ
REVOKE INSERT ON employees FROM user1;

-- ๋ชจ๋“  ๊ถŒํ•œ ์ œ๊ฑฐ
REVOKE ALL PRIVILEGES ON employees FROM user1;

โœ… TCL

Transaction Control Language, ํŠธ๋žœ์žญ์…˜ ์ œ์–ด ์–ธ์–ด๋กœ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค.

 

๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜์ด๋ž€, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๊ฒฐ๊ณผ๋Š” ๋ฐ˜๋“œ์‹œ ์„ฑ๊ณต(์ „์ฒด ์ˆ˜ํ–‰) ๋˜๋Š” ์‹คํŒจ(์•„๋ฌด๊ฒƒ๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ)์ด๋‹ค. ์ค‘๊ฐ„๊นŒ์ง€๋งŒ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

  • COMMIT

ํŠธ๋žœ์žญ์…˜์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์™„๋ฃŒํ•˜๊ณ , ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜ํ•œ๋‹ค.

BEGIN; -- ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
UPDATE employees SET salary = 6000 WHERE name = 'Alice';
COMMIT;  -- ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜
  • ROLLBACK

ํŠธ๋žœ์žญ์…˜ ์ด์ „์œผ๋กœ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ๋˜๋Œ๋ฆฐ๋‹ค.(undo)

BEGIN;
UPDATE employees SET salary = 6000 WHERE name = 'Alice';
ROLLBACK;  -- ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ทจ์†Œํ•˜๊ณ  ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ

-- ๋กค๋ฐฑ ํ›„์—๋Š” Alice์˜ salary๊ฐ€ ์›๋ž˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค
  • SAVEPOINT

ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋ง ๊ทธ๋Œ€๋กœ ์„ธ์ด๋ธŒ ํฌ์ธํŠธ, ์ค‘๊ฐ„ ์ €์žฅ ์ง€์ ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๋กค๋ฐฑ์ด ๋˜๋”๋ผ๋„ ์„ธ์ด๋ธŒ ํฌ์ธํŠธ ์ดํ›„ ์ž‘์—…๋งŒ ์ทจ์†Œ๋˜๊ณ , ์„ธ์ด๋ธŒ ํฌ์ธํŠธ ์ด์ „ ๋ถ€๋ถ„์€ ์ปค๋ฐ‹๋  ์ˆ˜ ์žˆ๋‹ค.

BEGIN; -- ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
UPDATE employees SET salary = 5000 WHERE name = 'Bob';
SAVEPOINT point1;  -- ์ค‘๊ฐ„ ์ง€์  ์„ค์ •
UPDATE employees SET salary = 6000 WHERE name = 'Alice';
ROLLBACK TO point1;  -- point1 ์ง€์ ๊นŒ์ง€ ๋กค๋ฐฑ
COMMIT;  -- ์ตœ์ข… ์ปค๋ฐ‹

-- Bob์˜ ๊ธ‰์—ฌ๋Š” 5000์œผ๋กœ ์ˆ˜์ •๋˜๊ณ , Alice์˜ ๊ธ‰์—ฌ๋Š” 6000์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€๋งŒ
-- ๋กค๋ฐฑ ํ›„ Alice ๊ธ‰์—ฌ๋Š” ์—…๋ฐ์ดํŠธ ์ „ ์›๋ž˜ ์ƒํƒœ๋กœ ์œ ์ง€๋จ

๐Ÿ’ก DDL, DML์˜ ์ฐจ์ด: ํŠธ๋žœ์žญ์…˜

DDL๊ณผ DML์€
"๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๊ฐ€", "๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๊ฐ€" ์— ๋Œ€ํ•œ ์ฐจ์ด ๋ง๊ณ ๋„
ํŠธ๋žœ์žญ์…˜์„ ์–ด๋–ป๊ฒŒ ํ•˜๋А๋ƒ์— ๋”ฐ๋ฅธ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

TCL ์ฑ•ํ„ฐ์—์„œ ์ด์•ผ๊ธฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ
DML ์‚ฌ์šฉ ์‹œ์—๋Š” COMMIT์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์˜๊ตฌ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ROLLBACK์„ ํ†ตํ•ด ๋ณ€๊ฒฝ์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฆ‰, ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋กค๋ฐฑ์ด๋‚˜ ์ปค๋ฐ‹์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

BEGIN; 

UPDATE employees SET salary = 6000 WHERE name = 'Bob';
COMMIT;
-- Bob์˜ ์—ฐ๋ด‰์„ ์ˆ˜์ •ํ•œ ํ–‰๋™์€ ์˜๊ตฌ ๋ฐ˜์˜๋จ

UPDATE employees SET salary = 5000 WHERE name = 'Alice';
ROLLBACK;
-- Alice์˜ ์—ฐ๋ด‰์„ ์ˆ˜์ •ํ•œ ํ–‰๋™์€ ์ทจ์†Œ๋จ

 

์ด๋•Œ ๋กค๋ฐฑ์˜ ์ ์šฉ ๊ตฌ๊ฐ„์€ ๋งˆ์ง€๋ง‰ COMMIT~ROLLBACK ์‚ฌ์ด ๊ตฌ๊ฐ„์ด๋‹ค.
์œ„ ์˜ˆ์‹œ์—์„œ๋Š” Alice์˜ ์—ฐ๋ด‰์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ–‰๋™๋งŒ ํฌํ•จ์ด ๋œ๋‹ค.

 

๊ตฌ๊ธ€๋ง์„ ํ•˜๋ฉฐ DDL์€ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ธ€์„ ๊ฝค ๋ดค๋Š”๋ฐ
MySQL ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด DDL์„ ํŠธ๋žœ์žญ์…˜์„ ํ•œ๋‹ค.

 

DDL statements automatically commit the current transaction; they cannot be rolled back.

 

๋‹ค๋งŒ DDL ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉ ์‹œ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹๊นŒ์ง€ ๋ฐ”๋กœ ์ง„ํ–‰๋˜๋ฏ€๋กœ
๋กค๋ฐฑ์„ ํ•˜์—ฌ ์ทจ์†Œํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค.
์ •ํ™•ํžˆ๋Š” ์ž๋™์œผ๋กœ ์ปค๋ฐ‹๋˜๋ฏ€๋กœ ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์„ ์ง์ ‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†๊ณ ,
ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋กค๋ฐฑ์„ ํ†ตํ•œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒŒ ์˜ณ๋‹ค.

 

โœ… ์ •๋ฆฌํ•˜์ž๋ฉด

  • DML์€ ์ˆ˜ํ–‰ ํ›„ ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • DDL์€ ์ˆ˜ํ–‰ ์ฆ‰์‹œ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹๋˜๋ฏ€๋กœ ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

๐Ÿ“• Fundamentals of Database Systems, 2017, Ramez Elmasri and Shamkant B.Navathe
MySQL ๊ณต์‹ ๋ฌธ์„œ
DDL๊ณผ ํŠธ๋žœ์žญ์…˜, ๊ทธ๋ฆฌ๊ณ  Atomic DDL
SQL Commands | DDL, DQL, DML, DCL and TCL Commands

๋ฐ˜์‘ํ˜•

'๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] ํŠธ๋žœ์žญ์…˜ ACID ์†์„ฑ๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€  (0) 2025.03.28
[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”์™€ ์—ญ์ •๊ทœํ™”: 1NF, 2NF, 3NF, BCNF  (0) 2025.03.09
'๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [DB] ํŠธ๋žœ์žญ์…˜ ACID ์†์„ฑ๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
  • [DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”์™€ ์—ญ์ •๊ทœํ™”: 1NF, 2NF, 3NF, BCNF
์†Œ์˜ ๐Ÿ€
์†Œ์˜ ๐Ÿ€
Hello World โœจ
  • ์†Œ์˜ ๐Ÿ€
    Soyoung's Dev Lab
    ์†Œ์˜ ๐Ÿ€
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (41) N
      • ๐Ÿ“ข ๊ฒŒ์‹œํŒ (0)
      • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1)
      • ๐ŸŒฟSpring (14) N
      • ๐Ÿ˜บ ์–ธ์–ด (7) N
        • โ˜•Java (7) N
      • ๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (3)
      • ๐Ÿ“ค ๋ฐฐํฌ (4)
      • ๐Ÿ”Ž ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ (1)
      • โš™๏ธ ๊ธฐํƒ€ ๊ฐœ๋ฐœ ์ž๋ฃŒ (9)
      • ๐Ÿ–ฅ๏ธ ํ”„๋กœ์ ํŠธ (0)
      • ๐Ÿ‘ฉ‍๐Ÿ’ป ํ™œ๋™ & ํ›„๊ธฐ (0)
      • ๐Ÿต ์ด์•ผ๊ธฐ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํƒœ๊ทธ
  • ๋งํฌ

    • github
    • velog
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Spring
    Java
    ์œ„ํด๋ฆฌ ํŽ˜์ดํผ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ
    docker
    ๊ฐœ๋ฐœ
    Spring Security
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ๋ฐฐํฌ
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ์„œ๋ฒ„
    ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ์ž๋ฃŒ๊ตฌ์กฐ
    GIT
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์†Œ์˜ ๐Ÿ€
[DB] SQL ๋ช…๋ น์–ด ์ •๋ฆฌ: DDL, DML, DQL, DCL, TCL
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”