• WHERE <Условие отбора> – укажите условие отбора, чтобы изменения были применены только к тем строкам таблицы, которые удовлетворяют этому условию. Если условие отбора не задано, изменения будут применены ко всем строкам таблицы. Условия отбора мы рассматривали в подразделе «Условия отбора». В условиях отбора можно использовать вложенный запрос (см. подраздел «Вложенные запросы»), который не должен обращаться к самой модифицируемой таблице.
• ORDER BY <Имя столбца> [ASC или DESC] – при необходимости вы можете указать, в каком порядке применять изменения к строкам таблицы. Обычно порядок применения изменений не влияет на результат выполнения операции. Однако в некоторых случаях последовательность действий может быть важна. Например, если вы установили предельное количество изменяемых строк (см. следующий пункт), то некоторые строки, удовлетворяющие условию отбора, могут остаться неизменными, а какие именно это будут строки – зависит от последовательности применения изменений. Другим подобным случаем является обновление значений первичного ключа или уникального индекса, которые не должны содержать повторяющихся значений, а наличие или отсутствие повторяющихся значений в столбце может зависеть от порядка применения изменений.
• LIMIT <Количество строк> – при необходимости вы можете указать максимальное количество строк таблицы, которые могут быть изменены командой UPDATE. Если это количество измененных строк достигнуто, операция завершается, даже если в таблице еще остались строки, которые удовлетворяют условию отбора и не были изменены.Примечание
При обновлении значения первичного ключа в родительской таблице выполняются проверки целостности данных (см. описание параметров внешнего ключа в пункте «Ключевые столбцы и индексы»).
Следующая команда, которую мы рассмотрим, – это команда REPLACE, осуществляющая либо добавление, либо замещение строк таблицы. Она имеет те же параметры, что и команда INSERT (см. подраздел «Вставка отдельных строк»):
Если в строке, вставляемой в таблицу с помощью команды REPLACE, значение первичного ключа или уникального индекса не совпадает ни с одним из уже существующих значений, то эта команда работает так же, как команда INSERT (если в таблице нет ни первичного ключа, ни уникального индекса, то команда REPLACE всегда работает как команда INSERT). Если же в таблице есть строка с таким же значением первичного ключа или уникального индекса, то перед добавлением новой строки прежняя строка удаляется. Например, выполнив команду
мы тем самым заменим в таблице Products (Товары) прежнюю строку с идентификатором 3, содержавшую информацию о кофеварке (см. листинг 2.5 выше), новой строкой, также имеющей идентификатор 3, но содержащей информацию о соковыжималке.
Отмечу, что в команде REPLACE, в отличие от команды UPDATE, нельзя задавать новые значения с помощью выражений, вычисляемых с использованием прежних значений, хранившихся в строке. Если вы укажете в команде REPLACE такое выражение, то вместо прежнего значения будет подставлено значение данного столбца по умолчанию.
И, наконец, последняя команда, которую мы рассмотрим, – команда удаления строк таблицы: