首页 > 解决方案 > MySQL - 覆盖现有行

问题描述

我正在使用 ID 系统,如果 ID 相同,我会尝试覆盖整行。我在以下帖子中使用了 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() 函数将在未来的版本中被删除。

警告:“VALUES 函数”已弃用,将在未来版本中删除。请使用 and alias (INSERT INTO ... VALUES(...) AS alias) 并将 ON DUPLICATE KEY UPDATE 子句中的 VALUES(col) 替换为 alias.col

我是 SQL 新手,我并没有真正理解这个别名的含义。我的问题是我可以使用什么,以及什么是最佳实践。

标签: mysqlsqlupsert

解决方案


您需要向 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;

推荐阅读