Команда UPDATE
используется для изменения существующих данных в таблице:
UPDATE table_name
SET column1 = value1,
column2 = value2, ...
[WHERE condition];
UPDATE employees
SET salary = 50000,
department = 'IT'
WHERE employee_id = 101;
UPDATE products
SET price = 29.99
WHERE product_id = 1001;
UPDATE customers
SET first_name = 'John',
last_name = 'Smith',
email = 'john.smith@example.com'
WHERE customer_id = 42;
UPDATE orders
SET total_amount = quantity * unit_price * (1 - discount)
WHERE order_id = 12345;
UPDATE employees
SET salary = salary * 1.1
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location = 'New York'
);
-- ОПАСНО: обновит все строки в таблице!
UPDATE products SET discontinued = 1;
-- Безопасный вариант
UPDATE products SET discontinued = 1
WHERE product_id = 1001;
-- Сначала посмотреть, что будет обновлено
SELECT * FROM employees
WHERE salary < 30000;
-- Затем выполнить обновление
UPDATE employees
SET salary = salary * 1.15
WHERE salary < 30000;
BEGIN TRANSACTION;
UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;
UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;
-- Проверить изменения перед коммитом
-- ROLLBACK; -- если что-то не так
COMMIT;
UPDATE p
SET p.price = p.price * 1.1
FROM products p
JOIN product_categories pc ON p.category_id = pc.category_id
WHERE pc.category_name = 'Electronics';
WITH top_products AS (
SELECT product_id
FROM sales
GROUP BY product_id
ORDER BY SUM(quantity) DESC
LIMIT 10
)
UPDATE products
SET featured = 1
WHERE product_id IN (SELECT product_id FROM top_products);
-- Обновить 100 записей за раз (SQL Server)
UPDATE TOP (100) customers
SET last_contact_date = GETDATE()
WHERE last_contact_date IS NULL;
UPDATE employees
SET vacation_days = vacation_days + 5
OUTPUT
inserted.employee_id,
deleted.vacation_days AS old_value,
inserted.vacation_days AS new_value
WHERE hire_date < '2020-01-01';
UPDATE employees e, departments d
SET e.salary = e.salary * 1.1
WHERE e.department_id = d.department_id
AND d.location = 'London';
UPDATE employees
SET salary = salary * 1.1
FROM departments
WHERE employees.department_id = departments.department_id
AND departments.location = 'London';
UPDATE
(SELECT e.salary, d.location
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.location = 'London')
SET salary = salary * 1.1;
Ключевые моменты обновления таблиц в SQL:
UPDATE table SET column = value WHERE condition
для базового обновленияБезопасный шаблон для важных обновлений:
BEGIN TRANSACTION;
-- Сначала проверить, какие строки будут затронуты
SELECT * FROM table WHERE condition;
-- Затем выполнить обновление
UPDATE table SET column = value WHERE condition;
-- Проверить результат
SELECT * FROM table WHERE condition;
-- COMMIT или ROLLBACK в зависимости от результата
COMMIT TRANSACTION;
Помните, что обновление данных - это операция, изменяющая состояние базы данных, поэтому важно: