π 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(λ°μ΄ν° μ‘°μμ΄)μ μλ²½νκ² μ΄ν΄ν μ μμ΅λλ€! π
π μΆκ° μ§λ¬Έμ΄ μμΌλ©΄ μΈμ λ μ§ μ§λ¬ΈνμΈμ! π