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

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

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

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

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

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

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

  3. Какую строку(-и) обновить

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

Например, этот запрос повышает цену товаров, у которых цена равна 5, до 10:

UPDATE products SET price = 10 WHERE price = 5;

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

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

UPDATE products SET price = price * 1.10;

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

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

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