← Назад к вопросам

Какие операторы меняют данные в таблице

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-среде, и всегда желательно выполнять их в рамках транзакций с предварительным бэкапом критичных данных.

Какие операторы меняют данные в таблице | PrepBro