๐ 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 |