SQL код скопирован в буфер обмена
EN PT FR

Урок 8.2: Оператор UPDATE

В предыдущем уроке мы научились добавлять новые строки с помощью INSERT INTO. Теперь рассмотрим, как изменять уже существующие данные с помощью оператора UPDATE. Это одна из ключевых операций DML, позволяющая поддерживать базу данных в актуальном состоянии.

Базовый синтаксис

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • UPDATE table_name — указывает таблицу, в которой нужно изменить данные.
  • SET column = value — задаёт новые значения для одного или нескольких столбцов.
  • WHERE condition — определяет, какие именно строки нужно обновить.

Важные правила

  • Всегда используйте WHERE: Без условия WHERE оператор UPDATE изменит все строки в таблице. Это одна из наиболее частых и опасных ошибок.
  • Типы данных: Новые значения должны соответствовать типу данных столбца.
  • Строки и даты: Текстовые значения и даты заключаются в одинарные кавычки (').
  • Числа: Числовые значения указываются без кавычек.
  • Транзакции: В боевых системах рекомендуется выполнять UPDATE внутри транзакции, чтобы иметь возможность откатить изменения в случае ошибки.

Примеры

Пример 1: Обновление одного столбца

Изменим адрес электронной почты конкретного покупателя в таблице customer.

UPDATE customer
SET email = 'new.email@example.com'
WHERE customer_id = 1;

Примечание: Условие WHERE customer_id = 1 гарантирует, что изменится только одна конкретная запись.

Пример 2: Обновление нескольких столбцов одновременно

В операторе SET можно перечислить несколько столбцов через запятую.

UPDATE customer
SET first_name = 'ALICE',
    last_name  = 'COOPER',
    email      = 'alice.cooper@example.com'
WHERE customer_id = 42;

Пример 3: Использование текущего значения в выражении

Оператор UPDATE позволяет вычислять новое значение на основе текущего. Например, увеличим стоимость аренды всех фильмов категории «Comedy» на 10%:

UPDATE film
SET rental_rate = rental_rate * 1.10
WHERE film_id IN (
    SELECT f.film_id
    FROM film f
    JOIN film_category fc ON f.film_id = fc.film_id
    JOIN category c       ON fc.category_id = c.category_id
    WHERE c.name = 'Comedy'
);

Результат: у всех фильмов жанра «Comedy» стоимость аренды увеличится на 10%.

Пример 4: Обновление нескольких строк по условию

Пометим всех неактивных покупателей, которые не совершали аренду после определённой даты:

UPDATE customer
SET active = 0
WHERE customer_id NOT IN (
    SELECT DISTINCT customer_id
    FROM rental
    WHERE rental_date >= '2005-08-01'
);

Пример 5: Сброс значения в NULL

Если столбец допускает NULL, его можно явно очистить:

UPDATE film
SET original_language_id = NULL
WHERE film_id = 10;

Проверка перед обновлением

Хорошей практикой является сначала выполнить SELECT с тем же условием WHERE, чтобы убедиться, что будут изменены именно нужные строки:

-- Сначала проверяем, что вернёт SELECT
SELECT customer_id, first_name, last_name, email
FROM customer
WHERE customer_id = 1;

-- Только после проверки выполняем UPDATE
UPDATE customer
SET email = 'new.email@example.com'
WHERE customer_id = 1;

Ключевые выводы этого урока:

  • Оператор UPDATE изменяет существующие строки в таблице.
  • Без условия WHERE будут обновлены все строки таблицы — всегда проверяйте его наличие.
  • В одном операторе SET можно обновить сразу несколько столбцов, разделив их запятыми.
  • Новое значение столбца может вычисляться на основе его текущего значения (например, price = price * 1.1).
  • Перед выполнением UPDATE рекомендуется сделать SELECT с тем же условием, чтобы проверить затрагиваемые строки.

В следующем уроке мы рассмотрим оператор DELETE — как удалять строки из таблицы безопасно и контролируемо.