mysql - 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 新手,我并没有真正理解这个别名的含义。我的问题是我可以使用什么,以及什么是最佳实践。
解决方案
您需要向 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;
推荐阅读
- tomcat - tomcat 8.0下快速增长的日志文件
- symfony - 错误:预期的 Doctrine\ORM\Query\Lexer::T_IDENTIFIER,得到 '*'
- amazon-web-services - 如何在 AWS ec2 上部署 ASP.NET Core 网站
- java - Spark Java - 将多列收集到数组列中
- c - linux: 看门狗节点未在 /dev 目录中创建
- git - jsoncpp 上的 AOSP repo 同步错误,但 git clone 正常
- node.js - 获取 URL 包含嵌入式凭据的子资源请求的 URL
- ios - 无法使用 xcode 9.0 在 mac os 10.13.2 中构建 ionic3 ipa
- abap - 按钮上的 Web Dynpro 动作
- python - 如何在 matplotlib 中显示第二个 Y 轴的值?