← Назад к вопросам
Какие операторы меняют данные в таблице
1.0 Junior🔥 141 комментариев
#Базы данных и SQL
Комментарии (1)
🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Операторы изменения данных в SQL
В языке SQL для модификации данных в таблицах используются три основных оператора: INSERT, UPDATE и DELETE. Эти операторы относятся к категории Data Manipulation Language (DML).
1. Оператор INSERT
Добавляет новые строки в таблицу.
-- Добавление одной строки с указанием всех значений
INSERT INTO employees (id, name, department, salary)
VALUES (1, 'Иван Петров', 'Разработка', 150000);
-- Добавление одной строки без указания колонок (все колонки в порядке таблицы)
INSERT INTO employees
VALUES (2, 'Мария Сидорова', 'Тестирование', 130000);
-- Добавление нескольких строк за один запрос
INSERT INTO employees (id, name, department, salary)
VALUES (3, 'Алексей Иванов', 'Разработка', 160000),
(4, 'Ольга Николаева', 'Аналитика', 140000);
-- Добавление данных из результата SELECT запроса
INSERT INTO archive_employees (id, name, department)
SELECT id, name, department
FROM employees
WHERE hire_date < '2020-01-01';
2. Оператор UPDATE
Изменяет существующие данные в таблице.
-- Обновление всех строк в таблице
UPDATE products SET price = price * 1.10; -- Увеличиваем все цены на 10%
-- Обновление с условием WHERE
UPDATE employees
SET salary = salary * 1.15,
last_promotion = CURRENT_DATE
WHERE department = 'Тестирование'
AND performance_rating >= 4.5;
-- Обновление с использованием подзапроса
UPDATE orders
SET status = 'Выполнен',
completed_at = CURRENT_TIMESTAMP
WHERE id IN (
SELECT order_id
FROM order_items
GROUP BY order_id
HAVING COUNT(*) = SUM(shipped_quantity)
);
3. Оператор DELETE
Удаляет строки из таблицы.
-- Удаление всех строк из таблицы (ОПАСНО!)
DELETE FROM temp_logs;
-- Удаление с условием WHERE
DELETE FROM session_data
WHERE last_activity < NOW() - INTERVAL '30 days';
-- Удаление с использованием JOIN
DELETE o
FROM orders o
LEFT JOIN payments p ON o.id = p.order_id
WHERE o.created_at < '2023-01-01'
AND p.id IS NULL;
Важные особенности и отличия
TRUNCATE vs DELETE:
TRUNCATE TABLEудаляет ВСЕ строки в таблице быстрее, чемDELETE, но:- Не ведет журнал удаления отдельных строк
- Сбрасывает автоинкрементные счетчики
- Не активирует триггеры DELETE
- Нельзя использовать с условием WHERE
-- TRUNCATE - полная очистка таблицы
TRUNCATE TABLE audit_log;
MERGE/UPSERT:
В некоторых СУБД (PostgreSQL, MySQL 8.0+) существует оператор MERGE или INSERT ... ON DUPLICATE KEY UPDATE для совмещения вставки и обновления:
-- PostgreSQL пример UPSERT
INSERT INTO users (id, email, login_count)
VALUES (101, 'test@example.com', 1)
ON CONFLICT (id)
DO UPDATE SET
login_count = users.login_count + 1,
last_login = CURRENT_TIMESTAMP;
Ключевые моменты для QA Engineer:
- Тестирование boundary cases: Проверка максимального/минимального количества изменяемых записей
- Валидация constraints: Убедиться, что операции не нарушают ограничения целостности (UNIQUE, FOREIGN KEY, CHECK)
- Изоляция транзакций: Проверка поведения при параллельном выполнении DML-операций
- Восстановление данных: Тестирование отката транзакций после неудачных изменений
- Производительность: Мониторинг времени выполнения операций на больших объемах данных
- Аудит изменений: Проверка корректности работы триггеров и логгирования
Каждый из этих операторов должен использоваться с осторожностью, особенно в production-среде, и всегда желательно выполнять их в рамках транзакций с предварительным бэкапом критичных данных.