| VALUES row_constructor_list } [AS row_alias [( col_alias  [, col_alias ] ...)]] [ON DUPLICATE KEY UPDATE assignment_list ] INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION ( partition_name  [, partition_name ] ...)] [AS row_alias [( col_alias  [, col_alias ] ...)]] SET assignment_list [ON DUPLICATE KEY UPDATE assignment_list ] INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION ( partition_name  [, partition_name ] ...)] [( col_name  [, col_name ] ...)] [AS row_alias [( col_alias  [, col_alias ] ...)]] {SELECT ... | TABLE table_name } [ON DUPLICATE KEY UPDATE assignment_list ] value : { expr  | DEFAULT} value_list : value  [, value ] ... row_constructor_list : ROW( value_list )[, ROW( value_list )][, ...] assignment : col_name  = [ row_alias .] value assignment_list : assignment  [, assignment ] ... 

INSERT  inserts new rows into an existing table. The INSERT ... VALUES , INSERT ... VALUES ROW() , and INSERT ... SET  forms of the statement insert rows based on explicitly specified values. The INSERT ... SELECT  form inserts rows selected from another table or tables. You can also use INSERT ... TABLE  in MySQL 8.0.19 and later to insert rows from a single table. INSERT  with an ON DUPLICATE KEY UPDATE  clause enables existing rows to be updated if a row to be inserted would cause a duplicate value in a UNIQUE  index or PRIMARY KEY . In MySQL 8.0.19 and later, a row alias with one or more optional column alises can be used with ON DUPLICATE KEY UPDATE  to refer to the row to be inserted. 

For additional information about INSERT ... SELECT  and INSERT ... ON DUPLICATE KEY UPDATE , see Section 13.2.6.1, “INSERT ... SELECT Statement” , and Section 13.2.6.2, “INSERT ... ON DUPLICATE KEY UPDATE Statement” . 

In MySQL 8.0, the DELAYED  keyword is accepted but ignored by the server. For the reasons for this, see Section 13.2.6.3, “INSERT DELAYED Statement” , 

Inserting into a table requires the INSERT  privilege for the table. If the ON DUPLICATE KEY UPDATE clause is used and a duplicate key causes an UPDATE  to be performed instead, the statement requires the UPDATE  privilege for the columns to be updated. For columns that are read but not modified you need only the SELECT  privilege (such as for a column referenced only on the right hand side of an col_name = expr assignment in an ON DUPLICATE KEY UPDATE  clause). 

When inserting into a partitioned table, you can control which partitions and subpartitions accept new rows. The PARTITION  clause takes a list of the comma-separated names of one or more partitions or subpartitions (or both) of the table. If any of the rows to be inserted by a given INSERT  statement do not match one of the partitions listed, the INSERT  statement fails with the error Found a row not 

