6.2. Обновление данных#
6.2. Обновление данных
Изменение данных, которые уже находятся в базе данных, называется обновлением. Вы можете обновлять отдельные строки, все строки в таблице или подмножество всех строк. Каждый столбец может быть обновлен отдельно; другие столбцы не затрагиваются.
Для обновления существующих строк используйте команду UPDATE. Для этого требуется три куска информации:
Имя таблицы и столбца для обновления
Новое значение столбца
Какую строку(-и) обновить
Следует помнить из Глава 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;