Обновление данных

Модификация данных, которые уже находятся в базе данных, называется обновлением. Можно обновить отдельные строки, все строки в таблице или подмножество всех строк. Каждый столбец может быть обновлен отдельно; другие столбцы не затрагиваются.

Чтобы обновить существующие строки, используйте команду UPDATE. Для этого требуется:

  1. Имя таблицы и столбца для обновления;

  2. Новое значение столбца;

  3. Условия задающее список строк для обновления.

SQL, как правило, не предоставляет уникальный идентификатор для строк (см. главу Определение данных). Поэтому не всегда возможно напрямую указать, какую строку обновлять. Вместо этого указывается, каким условиям должна соответствовать строка для обновления. Только если существуеть первичный ключ в таблице (независимо от того, объявлен он или нет), можно надежно обращаться к отдельным строкам, выбирая условие, соответствующее первичному ключу. Графические инструменты доступа к базе данных полагаются на этот факт, чтобы стало возможно обновлять строки по отдельности.

Например, эта команда обновляет все продукты с ценой 5 до цены 10:

UPDATE products SET price = 10 WHERE price = 5;

Это может привести к обновлению нуля, одной или нескольких строк. Попытка обновления, которое не соответствует ни одной строке, не является ошибкой.

Давайте посмотрим на эту команду подробно. Сначала следует ключевое слово UPDATE за которым следует имя таблицы. Как обычно, имя таблицы может быть дополнено схемой, в противном случае оно ищется в пути по умолчанию (search_path). Далее следует ключевое слово SET за которым следуют имя столбца, знак равенства и новое значение столбца. Новое значение столбца может быть любым скалярным выражением или просто константой. Например, если нужно поднять цену на все товары на 10%, можно использовать:

UPDATE products SET price = price * 1.10;

Как видно, выражение для нового значения может ссылаться на существующие значения в строке. Мы также пропустили WHERE. Если условие не задано,
это означает, что все строки в таблице будут обновлены. Если условие присутствует, обновляются только те строки, которые соответствуют условию WHERE. Обратите внимание, что знак равенства в предложении SET является присваиванием, а знак в предложении WHERE - сравнением, но это не создает никакой двусмысленности. Конечно, условие WHERE не обязательно должно быть критерием равенства. Доступны многие другие операторы (см. главу Функции и операторы). Но выражение должно вычисляться до логического результата.

Вы можете обновить более одного столбца в команде UPDATE, перечислив более одного назначения в предложении SET. Например:

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;