Какой SQL-запрос используется для обновления данных в таблице?

«Какой SQL-запрос используется для обновления данных в таблице?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для обновления данных используется оператор UPDATE. Ключевой момент — всегда явно указывать условие WHERE, чтобы не обновить все строки таблицы случайно.

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

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

Пример из реальной задачи: нужно было обновить статус заказа и время его модификации для конкретного пользователя.

UPDATE orders
SET status = 'shipped',
    shipped_at = NOW(),
    updated_at = NOW()
WHERE user_id = 4512
  AND status = 'processing'
  AND id = 789;

Важные практики при работе из кода:

  • Использование подготовленных выражений (Prepared Statements) для защиты от SQL-инъекций.
  • Транзакции, если обновление затрагивает несколько таблиц, чтобы обеспечить целостность данных.
  • Проверка количества затронутых строк после выполнения запроса, чтобы убедиться, что обновилась именно ожидаемая запись.

Пример на Python с psycopg2 (PostgreSQL):

import psycopg2

conn = psycopg2.connect(DATABASE_URL)
cur = conn.cursor()

# Безопасное обновление с параметрами
update_query = """
    UPDATE users SET last_login = %s WHERE email = %s
"""
cur.execute(update_query, (datetime.now(), 'user@example.com'))

# Проверяем, была ли обновлена строка
if cur.rowcount == 0:
    print("Пользователь не найден.")

conn.commit()
cur.close()
conn.close()