ОБНОВЛЕНИЕ
Синтаксис
Синтаксис для одной таблицы:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
[PARTITION (partition_list)]
[FOR PORTION OF period FROM expr1 TO expr2]
SET col1={expr1|DEFAULT} [,col2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Синтаксис для нескольких таблиц:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col1={expr1|DEFAULT} [, col2={expr2|DEFAULT}] ...
[WHERE where_condition]
Описание
Для синтаксиса с одной таблицей оператор UPDATE обновляет столбцы существующих строк в указанной таблице на новые значения. Оператор SET указывает, какие столбцы изменять и какие значения присвоить. Каждое значение может быть выражением или ключевым словом DEFAULT, чтобы явно установить столбец на его значение по умолчанию. Оператор WHERE, если указан, определяет условия, по которым выбираются строки для обновления. Без оператора WHERE, обновляются все строки. Если указан оператор ORDER BY, строки обновляются в указанном порядке. Оператор LIMIT устанавливает ограничение на количество обновляемых строк.
До версии MariaDB 10.3.2, для синтаксиса с несколькими таблицами UPDATE обновляет строки в каждой таблице, указанной в table_references, удовлетворяющие условиям. В этом случае ORDER BY и LIMIT использовать нельзя. Это ограничение было снято в версии MariaDB 10.3.2, и оба оператора могут использоваться при обновлении нескольких таблиц. Оператор UPDATE также может ссылаться на таблицы, расположенные в разных базах данных; см. Квалификаторы идентификаторов для синтаксиса.
where_condition — выражение, вычисляющее значение true для каждой строки, подлежащей обновлению.
table_references и where_condition определяются как описано в SELECT.
При обновлении одной таблицы присваивания вычисляются слева направо, а при обновлении нескольких таблиц нет гарантии определенного порядка. Если установлен флаг SIMULTANEOUS_ASSIGNMENT sql_mode (доступен начиная с MariaDB 10.3.5), операторы UPDATE вычисляют все присваивания одновременно.
Необходим только UPDATE привилегии для столбцов, упоминаемых в UPDATE , которые фактически обновляются. Требуется только привилегия SELECT для любых столбцов, которые читаются, но не изменяются. См. GRANT.
Оператор UPDATE поддерживает следующие модификаторы:
- Если используется ключевое слово
LOW_PRIORITY, выполнениеUPDATEоткладывается до тех пор, пока другие клиенты не перестанут читать данные из таблицы. Это влияет только на хранилища, использующие только блокировку на уровне таблицы (MyISAM, MEMORY, MERGE). См. операторы HIGH_PRIORITY и LOW_PRIORITY для подробностей. - Если используется ключевое слово
IGNORE, оператор обновления не прерывается даже при возникновении ошибок во время обновления. Строки, для которых возникают конфликты уникальных ключей, не обновляются. Строки, для которых столбцы обновляются до значений, приводящих к ошибкам преобразования данных, обновляются до ближайших допустимых значений.
РАЗДЕЛЕНИЕ
См. Оптимизация и выбор разделов для подробностей.
ДЛЯ ЧАСТИ
Операторы UPDATE с одинаковым источником и целью
Начиная с MariaDB 10.3.2, операторы UPDATE могут иметь одинаковый источник и цель.
Например, при наличии следующей таблицы:
DROP TABLE t1; CREATE TABLE t1 (c1 INT, c2 INT); INSERT INTO t1 VALUES (10,10), (20,20);
До версии MariaDB 10.3.1, следующий оператор UPDATE не работал:
UPDATE t1 SET c1=c1+1 WHERE c2=(SELECT MAX(c2) FROM t1); ERROR 1093 (HY000): Table 't1' is specified twice, both as a target for 'UPDATE' and as a separate source for data
Начиная с MariaDB 10.3.2, оператор успешно выполняется:
UPDATE t1 SET c1=c1+1 WHERE c2=(SELECT MAX(c2) FROM t1); SELECT * FROM t1; +------+------+ | c1 | c2 | +------+------+ | 10 | 10 | | 21 | 20 | +------+------+
Пример
Синтаксис для одной таблицы:
UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;
Синтаксис для нескольких таблиц:
UPDATE tab1, tab2 SET tab1.column1 = value1, tab1.column2 = value2 WHERE tab1.id = tab2.id;
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/update/