【问题标题】:Efficient way to check if composite key exists before inserting在插入之前检查复合键是否存在的有效方法
【发布时间】:2019-07-22 04:46:10
【问题描述】:

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

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

我有一个表,其组合键为 partIDorderIDstageID

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

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

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

【问题讨论】:

标签: mysql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多