mysql - 仅在不存在且不获取其 ID 的情况下插入一行
问题描述
我首先使用“INSERT IGNORE”和“INSERT ... ON DUPLICATE KEY UPDATE”来遵循本教程。但它不起作用。我正在使用 NodeJS 从 API 获取一些数据,并将这些数据存储到 mySQL 数据库中。在存储数据之前,我想知道这一行是否已经存在。ID 是 AUTO_INCREMENT,我不知道这个。我不想在 NodeJS 中使用 async/await 或 Promise,而是想在不知道 ID 的情况下用 mySQL 处理这一点。
我尝试了这个,但它添加了一个带有新 ID 的新行,而不是另一行已经存在:
INSERT INTO test (nom, date, heure) VALUES ('123456', '2018-08-23', '10:45:00') ON DUPLICATE KEY UPDATE nom='123456', date='2018-08-23', heure='10:45:00';
之后,我测试了这个,结果相同:
INSERT IGNORE INTO test (nom, date, heure) VALUES ('123456', '2018-08-23', '10:45:00')
谢谢你的帮助!
解决方案
为 3 列设置唯一索引:
ALTER TABLE test ADD UNIQUE un_index(nom, date, heure);
然后执行:
INSERT IGNORE INTO test (nom, date, heure) VALUES ('123456', '2018-08-23', '10:45:00');
如果 3 个值已经存在,则不会插入该行。
推荐阅读
- scala - 单个特征与 mixin 的实例化
- facebook-graph-api - Instagram Graph API - 当用户从个人账户切换到企业账户时获取媒体洞察指标
- laravel - 如何在 Laravel 中将三个多对多关系结果组合成一个集合?
- css - 如何在引导提示中更改文本颜色
- .net - 如何在 VB.NET 中获取出站 Twilio 调用的最终状态?
- vue.js - v-tooltip 不显示其背后的组件
- clips - CLIPS:检查多个事实
- asp.net-core - 无法使用身份服务器访问客户端应用程序
- angular - 反应式表单 - 控件无效但表单仍然有效
- php - 如何将 cURL 转换为 PHP cURL