MySQL中的INSERT ... ON DUPLICATE KEY UPDATE语句是一种非常有用的功能,它允许你在尝试插入新记录时,如果表中已经存在具有相同唯一键(通常是主键或唯一索引)的记录,则更新该记录的某些字段

以下是INSERT ... ON DUPLICATE KEY UPDATE的基本语法:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
column1 = CASE
    WHEN column1 THEN value1
    ELSE column1 END,
column2 = CASE
    WHEN column2 THEN value2
    ELSE column2 END,
...;

这里的table_name是你想要插入或更新数据的表名,column1, column2, … 是你想要插入或更新的列名,value1, value2, … 是你想要插入的值。

当执行INSERT语句时,如果表中不存在具有相同唯一键的记录,MySQL将插入新的记录。如果存在具有相同唯一键的记录,MySQL将使用ON DUPLICATE KEY UPDATE子句中的更新逻辑来更新现有记录。

示例

假设你有一个名为users的表,其中包含id主键)和email字段。如果你想要插入一个新的用户记录,或者如果该用户已经存在,则更新他们的电子邮件地址,可以使用以下语句:

INSERT INTO users (id, email)
VALUES (1, 'newemail@example.com')
ON DUPLICATE KEY UPDATE
email = VALUES(email);

在这个例子中,如果id为1的用户已经存在,email字段将被更新为'newemail@example.com'。如果用户不存在,将插入一个新的记录。

请注意,ON DUPLICATE KEY UPDATE子句中的VALUES(column_name)是特殊的语法,它引用了INSERT语句中为该列提供的值。

这种用法特别适用于需要同步数据或在插入时更新记录的场景。