UPDATE
Complete UPDATE statement guide for MariaDB. Complete syntax reference with WHERE conditions, JOIN operations, CTEs, and multi-table updates for production use.
Syntax
Single-table syntax:
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]
[RETURNING select_expr
[, select_expr ...]]The abbreviated [ORDER BY ...] shown above is the standard ORDER BY clause; see ORDER BY for its full form.
Multiple-table syntax:
CTE Syntax
non_cte_tableis a table not defined by a CTE (common table expression).expressionis the rest of theUPDATEstatement body (theSETclause, and optionallyWHERE,ORDER BY,LIMIT, andRETURNING).Supporting CTEs with
UPDATEis an extension of the SQL standard, similar to how MySQL does it.With
UPDATE, CTEs are read-only, like other derived tables – you cannot update columns from tables in the CTE expression.For use cases, see the CTE examples.
Description
For the single-table syntax, the UPDATE statement updates columns of existing rows in the named table with new values. TheSET clause indicates which columns to modify and the values they should be given. Each value can be given as an expression, or the keywordDEFAULT to set a column explicitly to its default value. TheWHERE clause, if given, specifies the conditions that identify which rows to update. With no WHERE clause, all rows are updated. If the ORDER BY clause is specified, the rows are updated in the order that is specified. The LIMIT clause places a limit on the number of rows that can be updated.
Both clauses can be used with multiple-table updates. For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions.
An UPDATE can also reference tables which are located in different databases; see Identifier Qualifiers for the syntax.
where_condition is an expression that evaluates to true for each row to be updated.
table_references and where_condition are as specified as described in SELECT.
For single-table updates, assignments are evaluated in left-to-right order, while for multi-table updates, there is no guarantee of a particular order. If the SIMULTANEOUS_ASSIGNMENT sql_mode is set, UPDATE statements evaluate all assignments simultaneously.
You need the UPDATE privilege only for columns referenced in an UPDATE that are actually updated. You need only the SELECT privilege for any columns that are read but not modified. See GRANT.
The UPDATE statement supports the following modifiers:
If you use the
LOW_PRIORITYkeyword, execution of theUPDATEis delayed until no other clients are reading from the table. This affects only storage engines that use only table-level locking (MyISAM, MEMORY, MERGE). See HIGH_PRIORITY and LOW_PRIORITY clauses for details.If you use the
IGNOREkeyword, the update statement does not abort even if errors occur during the update. Rows for which duplicate-key conflicts occur are not updated. Rows for which columns are updated to values that would cause data conversion errors are updated to the closest valid values instead.
PARTITION
See Partition Pruning and Selection for details.
FOR PORTION OF
See Application Time Periods - Updating by Portion.
UPDATE Statements With the Same Source and Target
UPDATE statements may have the same source and target. For example, given the following table:
Examples
Single-Table
Single-Table With RETURNING Clause
Multi-Table
CTE Single-Table
CTE Multi-Table
See Also
This page is licensed: GPLv2, originally from fill_help_tables.sql
Last updated
Was this helpful?

