Урок 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 — как удалять строки из таблицы безопасно и контролируемо.