UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT rows] или UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...] SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
Оператор UPDATE
обновляет столбцы в соответствии с их новыми значениями в
строках существующей таблицы. В выражении SET
указывается, какие именно
столбцы следует модифицировать и какие величины должны быть в них
установлены. В выражении WHERE
, если оно присутствует, задается, какие
строки подлежат обновлению. В остальных случаях обновляются все строки.
Если задано выражение ORDER BY
, то строки будут обновляться в указанном в
нем порядке.
Если указывается ключевое слово LOW_PRIORITY
, то выполнение данной команды
UPDATE
задерживается до тех пор, пока другие клиенты не завершат чтение
этой таблицы.
Если указывается ключевое слово IGNORE
, то команда обновления не будет
прервана, даже если при обновлении возникнет ошибка дублирования ключей.
Строки, из-за которых возникают конфликтные ситуации, обновлены не будут.
Если доступ к столбцу из указанного выражения осуществляется по аргументу
tbl_name
, то команда UPDATE
использует для этого столбца его текущее
значение. Например, следующая команда устанавливает столбец age
в
значение, на единицу большее его текущей величины:
mysql> UPDATE persondata SET age=age+1;
Значения команда UPDATE
присваивает слева направо. Например, следующая
команда удваивает значение в столбце age
, затем инкрементирует его:
mysql> UPDATE persondata SET age=age*2, age=age+1;
Если столбец устанавливается в его текущее значение, то MySQL замечает это и не обновляет его.
Команда UPDATE
возвращает количество фактически измененных строк. В
версии MySQL 3.22 и более поздних функция C API mysql_info()
возвращает
количество строк, которые были найдены и обновлены, и количество
предупреждений, имевших место при выполнении UPDATE
.
В версии MySQL 3.23 можно использовать LIMIT #
, чтобы убедиться, что было
изменено только заданное количество строк.
Начиная с версии MySQL 4.0.4 вы также можете выполнять UPDATE
, охватывающий множество таблиц:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
Обратите внимание: вы не можете использовать ORDER BY
или LIMIT
для многотабличных обновлений.