Create new rows in a table.


INSERT INTO table_ident
  [ ( column_ident [, ...] ) ]
  { VALUES ( expression [, ...] ) [, ...] | ( query ) }
    { column_ident = expression } [, ...]


INSERT creates one or more rows specified by value expressions.

The target column names can be listed in any order. If no list of column names is given at all, the default is all the columns of the table in lexical order; or the first N column names, if there are only N columns supplied by the VALUES clause. The values supplied by the VALUES clause are associated with the explicit or implicit column list left-to-right.

Each column not present in the explicit or implicit column list will not be filled.

If the expression for any column is not of the correct data type, automatic type conversion will be attempted.

On Duplicate Key Update

If ON DUPLICATE KEY UPDATE is specified and a row is inserted that would cause a duplicate-key conflict, an update of the existing row is performed.

ON DUPLICATE KEY UPDATE { column_ident = expression } [, ...]

Within expressions in the UPDATE clause you can use the VALUES(column_ident) function to refer to column values from the INSERT statement. So VALUES(column_ident) in the UPDATE clause referes to the value of the column_ident that would be inserted if no duplicate-key conflict occured. This function is especially useful in multiple-row inserts, because the values of the current row can be referenced.


table_ident:The identifier (optionally schema-qualified) of an existing table.
column_ident:The name of a column or field in the table pointed to by table_ident.
expression:An expression or value to assign to the corresponding column. Within a ON DUPLICATE KEY UPDATE clause the expression may also refer to an expression from VALUES by using VALUES ( column_ident )
query:A query (SELECT statement) that supplies the rows to be inserted. Refer to the SELECT statement for a description of the syntax. The SELECT statement must be surrounded by parenthesis.