π Data Manipulation Language
- *DML (λ°μ΄ν° μ‘°μμ΄)λ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ λ°μ΄ν°λ₯Ό **μ½μ , μμ , μμ λ° μ‘°ννλ SQL λͺ λ Ήμ΄μ λλ€.
λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°λ₯Ό κ΄λ¦¬νκ³ μ‘°μνλ ν΅μ¬ κΈ°λ₯μ μ 곡ν©λλ€.
β DMLμ μ£Όμ λͺ λ Ήμ΄
λͺ λ Ήμ΄ | μ€λͺ |
---|---|
INSERT |
μλ‘μ΄ λ°μ΄ν°λ₯Ό μΆκ° |
SELECT |
λ°μ΄ν°λ₯Ό μ‘°ν |
UPDATE |
κΈ°μ‘΄ λ°μ΄ν°λ₯Ό μμ |
DELETE |
λ°μ΄ν°λ₯Ό μμ |
π· 4-1. λ°μ΄ν° μ½μ (INSERT)
INSERT
λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ μλ‘μ΄ λ°μ΄ν°λ₯Ό ν
μ΄λΈμ μΆκ°ν μ μμ΅λλ€.
β
κΈ°λ³Έμ μΈ INSERT
λ¬Έλ²
INSERT INTO employees (name, age, department, salary, hire_date)
VALUES ('νκΈΈλ', 30, 'IT', 50000, '2024-03-10');
π νΉμ 컬λΌμλ§ κ°μ μ½μ νλ €λ©΄ ν΄λΉ 컬λΌλ§ λͺ μνλ©΄ λ¨.
π λ°μ΄ν° μ λ ₯ μμλ ν μ΄λΈ μμ± μ μ μλ μμμ μΌμΉν΄μΌ ν¨.
β μ¬λ¬ κ°μ λ°μ΄ν° μ½μ
INSERT INTO employees (name, age, department, salary, hire_date)
VALUES
('κΉμ² μ', 25, 'HR', 40000, '2024-02-15'),
('μ΄μν¬', 29, 'Finance', 55000, '2024-01-20');
π ν λ²μ μ¬λ¬ κ°μ λ°μ΄ν°λ₯Ό μ½μ κ°λ₯νμ¬ μ±λ₯ μ΅μ νμ λμλ¨.
β μλ μ¦κ°(AUTO_INCREMENT) μ»¬λΌ μ²λ¦¬
INSERT INTO employees (name, department, salary, hire_date)
VALUES ('λ°μμ', 'Marketing', 48000, '2024-03-05');
π id
컬λΌμ΄ AUTO_INCREMENT
λ‘ μ€μ λ κ²½μ°, κ°μ μλ΅νλ©΄ μλ μ¦κ°λ¨.
β μ£Όμμ
INSERT
λ¬ΈμμAUTO_INCREMENT
κ° μ€μ λ 컬λΌ(id
)μ μ½μ ν λ,NULL
μ λͺ μμ μΌλ‘ λ£λ κ²½μ° μ€λ₯ λ°μ κ°λ₯μ±μ΄ μμ.DEFAULT
ν€μλλ₯Ό μ¬μ©νλ κ²μ΄ λ μμ ν¨.
β μμ λ μ½λ
-- μ¬λ°λ₯Έ μ½μ
λ°©μ
INSERT INTO employees (name, department, salary, hire_date)
VALUES ('λ°μμ', 'Marketing', 48000, '2024-03-05');
-- IDλ₯Ό λͺ
μμ μΌλ‘ μ€μ ν΄μΌ ν κ²½μ° (κΆμ₯νμ§ μμ)
INSERT INTO employees (id, name, department, salary, hire_date)
VALUES (DEFAULT, 'λ°μμ', 'Marketing', 48000, '2024-03-05');
π MariaDBμμλ NULL
λμ DEFAULT
ν€μλλ₯Ό μ¬μ©νλ©΄ AUTO_INCREMENT
κ°μ μλ ν λΉν¨.
π id
λ₯Ό μ§μ μ½μ
νμ§ μλ κ²μ΄ μΌλ°μ μΌλ‘ λ μμ μ μΈ λ°©λ²μ
π¨ 6. INSERT
μ ON DUPLICATE KEY UPDATE
- λμΌν
PRIMARY KEY
λλUNIQUE
κ°μ΄ μ΄λ―Έ μ‘΄μ¬νλ κ²½μ°INSERT
κ° μ€ν¨ν μ μμ. - μ΄λ₯Ό ν΄κ²°νκΈ° μν
ON DUPLICATE KEY UPDATE
κΈ°λ₯
INSERT INTO employees (id, name, salary)
VALUES (1, 'νκΈΈλ', 50000)
ON DUPLICATE KEY UPDATE
salary = VALUES(salary);
π κΈ°μ‘΄ id=1
μ΄ μ‘΄μ¬νλ©΄ salary
λ§ μ
λ°μ΄νΈλ¨.
π μλ‘μ΄ id=1
μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ INSERT
κ° μ€νλ¨.
π· 4-2. λ°μ΄ν° μ‘°ν (SELECT)
SELECT
λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°λ₯Ό κ²μνκ³ μ‘°νν μ μμ΅λλ€.
β
κΈ°λ³Έμ μΈ SELECT
λ¬Έλ²
SELECT * FROM employees;
π λͺ¨λ 컬λΌμ μ‘°νν λ *
μ¬μ© κ°λ₯νμ§λ§, μ±λ₯ μ΅μ νλ₯Ό μν΄ νμν 컬λΌλ§ λͺ
μνλ κ²μ΄ μ’μ.
β νΉμ 컬λΌλ§ μ‘°ν
SELECT name, department, salary FROM employees;
π νμν 컬λΌλ§ μ§μ νμ¬ μ‘°ν κ°λ₯.
β
쑰건μ μ¬μ©ν λ°μ΄ν° μ‘°ν (WHERE
)
SELECT * FROM employees WHERE department = 'IT';
π WHERE
μ μ μ¬μ©νμ¬ νΉμ 쑰건μ λ§μ‘±νλ λ°μ΄ν°λ§ μ‘°ν.
SELECT * FROM employees WHERE age >= 30 AND salary > 50000;
π λ
Όλ¦¬ μ°μ°μ(AND
, OR
)λ₯Ό νμ©νμ¬ λ³΅ν© μ‘°κ±΄ μ€μ κ°λ₯.
β
λ°μ΄ν° μ λ ¬ (ORDER BY
)
SELECT * FROM employees ORDER BY salary DESC;
π κΈμ¬(salary
) κΈ°μ€μΌλ‘ λ΄λ¦Όμ°¨μ(DESC
) μ λ ¬.
π μ€λ¦μ°¨μ μ λ ¬μ ASC
(κΈ°λ³Έκ°).
SELECT * FROM employees ORDER BY department ASC, salary DESC;
π λΆμ(department
) κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬νκ³ , κ°μ λΆμ λ΄μμλ salary
κΈ°μ€μΌλ‘ λ΄λ¦Όμ°¨μ μ λ ¬.
πNULL
κ°μ΄ κΈ°λ³Έμ μΌλ‘ μ€λ¦μ°¨μ(ASC
)μμλ λ¨Όμ , λ΄λ¦Όμ°¨μ(DESC
)μμλ λ§μ§λ§μ μ λ ¬λ¨.
β μμ λ μ½λ
-- κΈμ¬κ° NULLμΈ λ°μ΄ν°λ₯Ό κ°μ₯ λ§μ§λ§μ λ°°μΉ
SELECT * FROM employees ORDER BY salary DESC NULLS LAST;
π MariaDBλ NULLS LAST
λλ NULLS FIRST
λ₯Ό κΈ°λ³Έ μ§μνμ§ μμΌλ―λ‘ IS NULL
μ νμ©ν μ°ν λ°©λ²μ΄ νμν¨.
-- NULL κ°μ λ¨Όμ μ λ ¬νλ λ°©λ²
SELECT * FROM employees ORDER BY salary IS NULL, salary DESC;
π IS NULL
μ νμ©νμ¬ NULL λ°μ΄ν°λ₯Ό λ¨Όμ μ λ ¬ ν κΈμ¬λ₯Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ κ°λ₯.
β
μμ Nκ° λ°μ΄ν° μ‘°ν (LIMIT
)
SELECT * FROM employees ORDER BY salary DESC LIMIT 5;
π κΈμ¬κ° λμ μμ 5λͺ μ‘°ν.
SELECT * FROM employees ORDER BY salary DESC LIMIT 5 OFFSET 2;
π κΈμ¬κ° λμ 3λ²μ§Έ~7λ²μ§Έ λ°μ΄ν° μ‘°ν (νμ΄μ§ μ²λ¦¬).
π· 4-3. λ°μ΄ν° μμ (UPDATE)
UPDATE
λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό λ³κ²½ν μ μμ΅λλ€.
β νΉμ μ»¬λΌ μ λ°μ΄νΈ
UPDATE employees SET salary = 60000 WHERE name = 'νκΈΈλ';
π νκΈΈλμ κΈμ¬λ₯Ό 60,000μΌλ‘ λ³κ²½.
β μ¬λ¬ κ°μ μ»¬λΌ μ λ°μ΄νΈ
UPDATE employees
SET salary = 62000, department = 'Finance'
WHERE name = 'κΉμ² μ';
π κΉμ² μμ λΆμλ₯Ό Finance
λ‘ λ³κ²½νκ³ κΈμ¬λ₯Ό 62,000μΌλ‘ μμ .
β
λͺ¨λ νμ μμ ν κ²½μ° (WHERE
μμ΄ μ¬μ© μ£Όμ!)
UPDATE employees SET salary = salary * 1.1;
π μ 체 μ§μμ κΈμ¬λ₯Ό 10% μΈμ.
β μ£Όμ: WHERE
μ μ΄ μμΌλ©΄ λͺ¨λ λ°μ΄ν°κ° μμ λ¨.
β μ€λ¬΄μμ μ’ μ’ λ°μνλ μΉλͺ μ μΈ μ€μλ₯Ό λ§μΌλ €λ©΄
-- νΉμ μ§μμ κΈμ¬λ§ μμ
UPDATE employees SET salary = 60000 WHERE name = 'νκΈΈλ';
-- μ 체 ν μμ μ λ°λμ νμΈ μ μ°¨ νμ
START TRANSACTION;
UPDATE employees SET salary = salary * 1.1; -- λ‘€λ°± κ°λ₯
ROLLBACK;
π START TRANSACTION
μ μ¬μ©νλ©΄ μ€μλ‘ μλͺ»λ UPDATE
λ₯Ό μ€ννμ λ ROLLBACK
κ°λ₯.
π μ€λ¬΄μμλ WHERE
μμ΄ UPDATE
λ₯Ό μ€ννλ κ²μ νΌν΄μΌ νλ©°, λ°λμ TRANSACTION
μ νμ©νλ κ²μ΄ μ’μ.
π· 4-4. λ°μ΄ν° μμ (DELETE)
β νΉμ λ°μ΄ν° μμ
DELETE FROM employees WHERE name = 'μ΄μν¬';
π μ΄λ¦μ΄ μ΄μν¬
μΈ μ§μμ λ°μ΄ν°λ₯Ό μμ .
β νΉμ 쑰건μ μ¬λ¬ λ°μ΄ν° μμ
DELETE FROM employees WHERE salary < 40000;
π κΈμ¬κ° 40,000 λ―Έλ§μΈ μ§μ μμ .
β
λͺ¨λ λ°μ΄ν° μμ (WHERE
μμ΄ μ¬μ© μ£Όμ!)
DELETE FROM employees;
π λͺ¨λ λ°μ΄ν°λ₯Ό μμ νμ§λ§ ν μ΄λΈ ꡬ쑰λ μ μ§λ¨.
β μ€μλ‘ λͺ¨λ λ°μ΄ν°λ₯Ό μμ νμ§ μλλ‘ μ£Όμ νμ!
β
DELETE
vs TRUNCATE
μ°¨μ΄
λͺ λ Ήμ΄ | λ°μ΄ν° μμ | ROLLBACK κ°λ₯ μ¬λΆ | AUTO_INCREMENT μ΄κΈ°ν μ¬λΆ | μΈλ ν€ μ ν (FK) |
---|---|---|---|---|
DELETE FROM employees; |
νλ§ μμ | β
κ°λ₯ (TRANSACTION λ΄μμ) |
β μ μ§λ¨ | β FK μ ν μ μ© |
TRUNCATE TABLE employees; |
ν μμ + ν μ΄λΈ μ΄κΈ°ν | β λΆκ°λ₯ | β 리μ λ¨ | β FK μ νμΌλ‘ μ€ν λΆκ°. |
π TRUNCATE
λ μΈλ ν€(FK)κ° μ€μ λ ν
μ΄λΈμμλ μ¬μ©ν μ μμ.
π TRUNCATE
λ₯Ό μ€ννλ €λ©΄ λ¨Όμ μΈλ ν€ μ μ½ μ‘°κ±΄μ λΉνμ±νν΄μΌ
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE employees;
SET FOREIGN_KEY_CHECKS = 1;
π μΈλ ν€(FK) μ νμ΄ μλ κ²½μ° TRUNCATE
λ₯Ό μ€ννκΈ° μ μ SET FOREIGN_KEY_CHECKS = 0;
μ€μ μ΄ νμ.
π· 4-5. νΈλμμ (Transaction)
β νΈλμμ μ΄λ?
- μ¬λ¬ κ°μ DML λͺ λ Ήμ΄λ₯Ό νλμ μμ λ¨μλ‘ λ¬Άμ΄ μ²λ¦¬νλ κΈ°λ₯.
COMMIT
λλROLLBACK
μ μ¬μ©νμ¬ μ€ν κ²°κ³Όλ₯Ό νμ νκ±°λ μ·¨μν μ μμ.
β νΈλμμ μμ
START TRANSACTION;
UPDATE employees SET salary = salary * 1.1;
ROLLBACK; -- λ³κ²½ μ·¨μ
π ROLLBACK
μ μ¬μ©νλ©΄ μ΄μ μνλ‘ λλ릴 μ μμ.
β νΈλμμ νμ
START TRANSACTION;
UPDATE employees SET salary = salary * 1.1;
COMMIT; -- λ³κ²½ νμ
π COMMIT
μ μ¬μ©νλ©΄ λ³κ²½ μ¬νμ΄ μ΅μ’
μ μ₯λ¨.
β
TRANSACTION
μ μ¬μ©ν λ AUTOCOMMIT
λͺ¨λκ° νμ±νλ κ²½μ°, λͺ
μμ μΌλ‘ START TRANSACTION
μ μ€νν΄μΌ ν¨.
-- νΈλμμ
λͺ¨λ λΉνμ±ν
SET AUTOCOMMIT = 0;
START TRANSACTION;
UPDATE employees SET salary = salary * 1.1;
COMMIT;
-- μλ μνλ‘ λ³΅κ΅¬
SET AUTOCOMMIT = 1;
π MariaDBλ κΈ°λ³Έμ μΌλ‘ AUTOCOMMIT
μ΄ νμ±νλμ΄ μμΌλ―λ‘, νΈλμμ
μ μ¬μ©ν λ μ΄λ₯Ό λͺ
νν μ€μ ν΄μΌ ν¨.
π SET AUTOCOMMIT = 0;
μ μ€μ νλ©΄ COMMIT
μ λͺ
μμ μΌλ‘ μ€νν΄μΌ λ³κ²½ μ¬νμ΄ μ μ₯λ¨.
π· β μ 리 (λ Έμ μ© μ΅μ ν ν¬λ§·)
π DML ν΅μ¬ κ°λ μμ½
1οΈβ£ λ°μ΄ν° μ½μ
(INSERT
)
2οΈβ£ λ°μ΄ν° μ‘°ν (SELECT
+ WHERE
, ORDER BY
, LIMIT
)
3οΈβ£ λ°μ΄ν° μμ (UPDATE
)
4οΈβ£ λ°μ΄ν° μμ (DELETE
vs TRUNCATE
)
5οΈβ£ νΈλμμ
(COMMIT
, ROLLBACK
)
π μ΄μ MariaDBμ DML(λ°μ΄ν° μ‘°μμ΄)μ μλ²½νκ² μ΄ν΄ν μ μμ΅λλ€! π
π μΆκ° μ§λ¬Έμ΄ μμΌλ©΄ μΈμ λ μ§ μ§λ¬ΈνμΈμ! π