MySQL - 覆盖现有行

MySQL - Overwriting existing rows

我正在使用 ID 系统,如果 ID 相同,我将尝试覆盖整行。 我在以下 post 中使用了 eggyal 的建议: SQL - IF EXISTS UPDATE ELSE INSERT INTO

INSERT INTO Data_test (SN, Inspect_Date, Inspector_Name, Cable_Check) VALUES ('SN003400', CURRENT_TIMESTAMP, 'Jack', 1)
ON DUPLICATE KEY UPDATE
    SN = VALUES(SN), Inspect_Date = VALUES(Inspect_Date), Inspector_Name= VALUES(Inspector_Name), Cable_Check= VALUES(Cable_Check);

这正是我需要的,但我确实收到了一条错误消息,指出 VALUES() 函数将在未来的版本中删除。

Warning: 'VALUES function' is deprecated and will be removed in a future release. Please use and alias (INSERT INTO ... VALUES(...) AS alias) and replace VALUES(col) in the ON DUPLICATE KEY UPDATE clause with alias.col instead

我是 SQL 的新手,我不太明白这个别名的含义。 我的问题是我可以用什么代替,什么是最佳实践。

您需要为 VALUES 子句添加别名,然后使用该别名

INSERT INTO Data_test (SN, Inspect_Date, Inspector_Name, Cable_Check) VALUES ('SN003400', CURRENT_TIMESTAMP, 'Jack', 1)
ON DUPLICATE KEY UPDATE
    SN = VALUES(SN), Inspect_Date = VALUES(Inspect_Date), Inspector_Name= VALUES(Inspector_Name), Cable_Check= VALUES(Cable_Check);

INSERT INTO Data_test (SN, Inspect_Date, Inspector_Name, Cable_Check) VALUES ('SN003400', CURRENT_TIMESTAMP, 'Jack', 1) AS newalias
    ON DUPLICATE KEY UPDATE
        SN = newalias.sn, Inspect_Date = newalias.Inspect_Date, Inspector_Name= newalias.Inspector_Name, Cable_Check= newalias.Cable_Check;