【问题标题】:Mysql query INSERT ON DUPLICATE KEY UPDATE adds new entry even when it shouldn'tMysql查询INSERT ON DUPLICATE KEY UPDATE添加新条目,即使它不应该
【发布时间】:2020-05-22 13:37:54
【问题描述】:

我的问题很简单,但最后一天让我发疯了,我找不到任何与我的问题完全相关的清晰、简洁的信息。我有以下查询

INSERT INTO people_names SET lastname = ?, firstname = ?, lifespan = ? 
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), lastname = VALUES(lastname), firstname = VALUES(firstname), lifespan = VALUES(lifespan)

基本上我想要它做的是插入数据(来自表单并正确收集 - 这部分有效),如果该人已经存在于表中,只需更新该行以便我可以获得id 通过 LAST_INSERT_ID,否则为表中的人员创建一个新条目(如果该名称和寿命不存在)。该人与其他东西具有多对多关系,因此我需要获取其 ID,无论它是否已插入或检测为已经存在,以放入另一个处理多对多关系的表中。 people_names 表中的“id”是一个自增主键。

但是,假设我在 people_names 表中已经有一个人,姓氏“Doe”,名字“John”,寿命“1900-1999”,然后我在表格中输入相同的数据并将其发送到查询时,会在同一个表中创建一个具有完全相同信息(“Doe”、“John”、“1900-1999”)的新条目,而不是更新已经存在的条目。

我做错了什么??

【问题讨论】:

    标签: mysql node.js mysql2


    【解决方案1】:

    INSERT 查询中的语法不正确。

    您的 SQL 查询应如下所示:

                INSERT INTO
                    table (field_1, field_2)
                VALUES
                    (?, ?)
                ON DUPLICATE KEY UPDATE
                    field_2 = VALUES(field_2)
    

    【讨论】:

    • 哦!忘了说我用的是nodejs的mysql2包,所以查询是这样执行的:let query = 'INSERT INTO people_names SET lastname = ?, firstname = ?, lifespan = ? ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), lastname = VALUES(lastname), firstname = VALUES(firstname), lifespan = VALUES(lifespan)'; let data = [lastName, firstName, lifeSpan]; await connection.promise().query(query, data,);
    • 所以?它仍然不起作用吗?你试过我的 SQL 查询了吗?
    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2015-01-20
    • 2010-10-07
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多