Как в SQL изменить данные в записи таблицы: запрос SQL UPDATE
Обновление SQL записей, как написать SQL команды, чтобы изменить строку в таблице?
Объясняю как редактировать данные в кортеже базы данных SQL, простыми словами без воды. Команда UPDATE SET это легко! Подойдёт для MySQL, PostgresQL, MS SQL, SQLite, Oracle, MariaDB и других SQL СУБД.
Команда UPDATE в SQL используется для изменения существующих данных в таблице
Она позволяет обновлять одну или несколько строк, а также одно или несколько полей в выбранной записи. Синтаксис SQL запроса UPDATE SET:
UPDATE
названиеТаблицы
SET
поле1 = значение1,
поле2 = значение2
WHERE
условие;
Это буквально означает «ОБНОВИТЬ таблицу УСТАНОВИТЬ новые значения для полей, В ЗАПИСЯХ СООТВЕТСТВУЮЩИХ условию».
Если условие не указано, обновятся все строки в таблице!
Поэтому в большинстве случаев важно использовать условие (WHERE) для ограничения обновляемых данных.
Обратите внимание, что между последним обновляемым полем, и оператором WHERE не должно быть запятой, иначе будет ошибка!
Например, в нашей базе данных есть таблица товаров с названием products, и мы хотим изменить цену товара с определённым id.
Почему id? Это уникальный номер каждой строки в таблице.
В одной таблице не может быть несколько одинаковых id, благодаря чему зная id записи, мы гарантированно можем изменить именно эту запись.
Пример как командой SQL обновить запись по id:
Чтобы обновить цену (price) для товара с id 5, SQL-запрос будет выглядеть так:
UPDATE products SET price = 200 WHERE id = 5;
В этом случае цена товара с id 5 обновится на 200.
Обратите внимание, что если мы пропустим условие WHERE, цена всех товаров в таблице будет обновлена.
Как в SQL изменить несколько полей в записи?
С помощью команды UPDATE мы можем обновлять не только одно поле, но и несколько одновременно. Например, если мы хотим обновить как название, так и цену товара с id 5, SQL-запрос будет следующим:
UPDATE products SET name = 'Новый продукт', price = 200 WHERE id = 5;
Как в SQL изменить несколько записей по условию:
Иногда бывает необходимо обновить несколько строк одновременно по определённому критерию. Например, если мы хотим повысить цену для всех продуктов в категории «Электроника» (допустим у неё будет id = 5) на 10%, мы можем использовать следующий запрос:
UPDATE products SET price = price * 1.10 WHERE category_id = 5;
В этом случае увеличивается цена всех товаров в категории с id 5. Используя такие условия, мы можем эффективно массово редактировать данные в базе.
Обновление данных с использованием подзапросов в SQL:
Пример команды SQL UPDATE с подзапросом. Использование подзапросов может быть полезно, когда нам нужно обновить записи на основе данных, извлечённых из другой таблицы.
Например, если у нас есть таблица discounts (скидки) и мы хотим обновить цены товаров на основе их текущих скидок, тогда запрос может выглядеть так:
UPDATE
products
SET
price = price - (
SELECT
discount
FROM
discounts
WHERE
products.id = discounts.product_id
);
Этот запрос обновляет цену каждого товара, уменьшая её на величину соответствующей скидки из таблицы discounts.
Использование транзакций при обновлении данных в SQL
Иногда обновления требуют большой выборки данных, и для того чтобы гарантировать целостность базы данных, целесообразно обернуть команду UPDATE в транзакцию. Это позволит откатить изменения в случае ошибки.
Транзакции позволяют группировать несколько операций так, чтобы они выполнялись как единое целое. Если одна из операций в транзакции завершается неудачно, вся транзакция может быть отменена, и данные останутся в исходном состоянии.
Предположим, у нас есть таблица: accounts (счета), и мы хотим перевести деньги с одного счета на другой. Этот процесс включает в себя два шага: вычитание суммы со счёта отправителя и добавление этой же суммы на счёт получателя.
Пример SQL транзакции при обновлении данных:
BEGIN;
UPDATE
accounts
SET
balance = balance - 100
WHERE
account_id = 1;
UPDATE
accounts
SET
balance = balance + 100
WHERE
account_id = 2;
-- Проверка, успешно ли прошли обновления
IF (SELECT balance FROM accounts WHERE account_id = 1) < 0 THEN
ROLLBACK; -- Откатить транзакцию, если на счёте недостаточно средств
ELSE
COMMIT; -- Зафиксировать изменения, если все прошло успешно
END IF;
Это очень простой пример, демонстрирующий каким образом использование транзакций позволяет избежать множества потенциальных ошибок и гарантировать целостность данных в базе.
Мы начинаем транзакцию с помощью команды BEGIN. Затем мы выполняем два обновления: уменьшаем баланс у счёта отправителя и увеличиваем баланс у счёта получателя. После этого мы проверяем, достаточно ли средств на счету отправителя. Если после вычитания баланс становится отрицательным, мы откатываем транзакцию с помощью ROLLBACK. Если же всё прошло успешно, мы используем команду COMMIT, чтобы подтвердить изменения.