mysql - 在插入之前检查复合键是否存在的有效方法
问题描述
我正在使用 mysql Nodejs 包,但我只会将此问题标记为 mysql,因为具有 mysql 知识的人应该能够帮助我。
这个问题更多是关于找到一种有效的方法来编写查询。
我有一个带有partID
,orderID
和的复合键的表stageID
。
如果没有先前的复合键,我需要插入到该表中,否则如果找到具有这些复合键的行,则更新其他字段。
我打算做一个选择查询,其中这 3 列的条件,然后在结果的情况下做一个更新,否则做一个插入。
这是处理这种情况的最好方法吗。抱歉,我对 SQL 数据库没有太多经验。
解决方案
只需将复合键定义为unique
或在它们上创建唯一索引:
alter table t add constraint unq_t_3 unique (partID, orderID stageID);
如果您尝试插入具有重复键的行,则会出现错误。如果要避免错误,请使用on duplicate key update
:
insert into t (partID, orderID, stageID, . . .)
values (?, ?, ?, . . .)
on duplicate key update partID = values(partID);
中的集合on duplicate key
除了防止重复错误之外什么都不做。
推荐阅读
- java - Android R:在下载目录中创建文件
- matlab - 如何从 MATLAB 中具有混合数据类型的特定 Excel 列中读取数据
- spring-boot - MappedSuperclass 中的 OneToMany
- python - 如何在给定的时间间隔内启用/禁用按钮
- google-sheets - 我在谷歌表格中的查询导入范围有什么问题?
- python - 在 Plotwidget 内滚动/缩放
- java - 当应用程序调用多个 Elasticsearch 端点时初始化 JestClient
- java - 代码在一种环境中有效,但在另一种环境中无效
- javascript - Blazor Webassembly JS 互操作 - “Microsoft.JSInterop.JSException:在‘窗口’中找不到‘WriteCookie’。”
- mysql - MySQL数据库备份和冲突