Ответ
Для модификации данных в реляционных базах данных используются операторы языка манипулирования данными (DML - Data Manipulation Language). Основные из них:
1. INSERT — добавление новых строк.
-- Добавление одной строки с указанием столбцов
INSERT INTO employees (first_name, last_name, department_id)
VALUES ('Иван', 'Петров', 5);
-- Добавление нескольких строк
INSERT INTO employees (first_name, last_name)
VALUES ('Анна', 'Сидорова'),
('Петр', 'Иванов');
-- Добавление данных из результата SELECT
INSERT INTO archive_employees (id, name)
SELECT id, CONCAT(first_name, ' ', last_name)
FROM employees
WHERE termination_date IS NOT NULL;
2. UPDATE — обновление существующих строк.
Важно: Всегда использовать WHERE, чтобы не обновить всю таблицу.
-- Обновление одной записи
UPDATE employees
SET salary = salary * 1.10, -- Увеличить зарплату на 10%
last_review_date = CURRENT_DATE
WHERE id = 42;
-- Обновление на основе подзапроса
UPDATE orders o
SET status = 'processed'
WHERE o.id IN (
SELECT order_id FROM payments WHERE is_confirmed = TRUE
);
3. DELETE — удаление строк.
-- Удаление конкретной записи
DELETE FROM log_entries
WHERE created_at < DATE_SUB(NOW(), INTERVAL 90 DAY);
-- Каскадное удаление (зависит от внешних ключей)
DELETE FROM departments WHERE id = 10;
4. MERGE (UPSERT) — объединение вставки и обновления. Полезен для синхронизации данных.
MERGE INTO inventory AS target
USING (SELECT 101 AS product_id, 50 AS new_quantity) AS source
ON target.product_id = source.product_id
WHEN MATCHED THEN
UPDATE SET target.quantity = target.quantity + source.new_quantity
WHEN NOT MATCHED THEN
INSERT (product_id, quantity) VALUES (source.product_id, source.new_quantity);
5. TRUNCATE — быстрое удаление всех строк из таблицы.
- Нельзя использовать с
WHERE. - Сбрасывает автоинкрементные счетчики.
- Обычно не пишется в журнал транзакций для каждой строки (нельзя откатить в некоторых СУБД).
- Требует более высоких привилегий, чем
DELETE.TRUNCATE TABLE temporary_session_data; -- Все данные удалены безвозвратно
Безопасность: Все операции UPDATE и DELETE должны выполняться в транзакциях при работе с продуктивными данными, чтобы была возможность отката (ROLLBACK).