首页 > 解决方案 > 在插入之前检查复合键是否存在的有效方法

问题描述

我正在使用 mysql Nodejs 包,但我只会将此问题标记为 mysql,因为具有 mysql 知识的人应该能够帮助我。

这个问题更多是关于找到一种有效的方法来编写查询。

我有一个带有partID,orderID和的复合键的表stageID

如果没有先前的复合键,我需要插入到该表中,否则如果找到具有这些复合键的行,则更新其他字段。

我打算做一个选择查询,其中这 3 列的条件,然后在结果的情况下做一个更新,否则做一个插入。

这是处理这种情况的最好方法吗。抱歉,我对 SQL 数据库没有太多经验。

标签: mysql

解决方案


只需将复合键定义为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除了防止重复错误之外什么都不做。


推荐阅读