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;