【问题标题】:MySQL Server Error when using ROWCOUNT to insert only unique records使用 ROWCOUNT 仅插入唯一记录时出现 MySQL 服务器错误
【发布时间】:2020-02-03 08:07:39
【问题描述】:

我正在节点中测试一些 javascript 代码、节点中的 mysql 包和 Visual Studio 代码终端中的 mysql。

我已经尝试了所有我能想到的方法 - 添加 ()、''、"" 等...我将语句分为更新语句和插入语句,并针对phpmyadmin ...令人惊讶的是,每个语句都可以正常工作!只有当我添加“IF @@ROWCOUNT=0 时,整个语句才会中断。

我的脚本正在运行以下保存到 javascript 变量中的 SQL 语句:

var sql = "UPDATE players SET userID='123',username='FNNewUser',site='blah' WHERE userID='123' IF @@ROWCOUNT=0 PRINT 'NO ROWS UPDATED'";

当我运行脚本时,它表现得好像可以工作,但随后抛出以下错误:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF @@ROWCOUNT=0 PRINT 'NO ROWS UPDATED'' at line 1
    at Query.Sequence._packetToError (C:\node\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
    at Query.ErrorPacket (C:\node\node_modules\mysql\lib\protocol\sequences\Query.js:77:18)
    at Protocol._parsePacket (C:\node\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (C:\node\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (C:\node\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (C:\node\node_modules\mysql\lib\protocol\Protocol.js:38:16)
    at Socket.<anonymous> (C:\node\node_modules\mysql\lib\Connection.js:91:28)
    at Socket.<anonymous> (C:\node\node_modules\mysql\lib\Connection.js:525:10)
    at Socket.emit (events.js:189:13)
    at addChunk (_stream_readable.js:284:12)
    --------------------
    at Protocol._enqueue (C:\node\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Connection.query (C:\node\node_modules\mysql\lib\Connection.js:201:25)
    at axios.get.then.response (C:\node\df-lineups.js:34:8)
    at process._tickCallback (internal/process/next_tick.js:68:7)

我正在尝试检查 mysql 中是否已经存在记录,如果记录不存在......然后运行插入语句。虽然这个问题可能已经在 StackO 上得到解答,但我也很感兴趣为什么当我将 IF 条件添加到我的 SQL 语句时它会引发错误。

【问题讨论】:

    标签: javascript mysql sql rowcount


    【解决方案1】:

    您的查询不是有效的 MySQL 语法。您应该只运行UPDATE 语句,然后使用node-js method changedRows 检查记录是否受到影响:

    var sql = "UPDATE players SET userID='123',username='FNNewUser',site='blah' WHERE userID='123'";
    connection.query(sql, function (error, results, fields) {
        if (error) throw error;
        if (results.changedRows == 0) console.log('no rows affected');
    });
    

    【讨论】:

    • @TechieCenter:这个答案是否正确回答了您的问题?
    猜你喜欢
    • 2016-11-15
    • 2012-01-02
    • 2022-07-29
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2012-06-23
    相关资源
    最近更新 更多