MySQL Server Ошибка при использовании ROWCOUNT для вставки только уникальных записей - PullRequest
2 голосов
/ 05 октября 2019

Я тестирую некоторый код JavaScript в узле, пакет mysql в узле и mysql в терминале кода Visual Studio.

Я перепробовал все, что мог придумать - добавление (), '', "" и т. Д ... Я разделил оператор на просто оператор обновления и просто оператор вставки и запустил еготаблица в phpmyadmin ... и что удивительно, каждое утверждение работает просто отлично! Только когда я добавляю «IF @@ ROWCOUNT = 0», весь оператор ломается.

Мой скрипт выполняет следующий оператор SQL, который сохраняется в переменной javascript:

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, и действительно ли запись DOESN'Существует ... затем выполняется оператор вставки. Хотя на этот вопрос, вероятно, уже был дан ответ в StackO, меня также очень интересует, почему, когда я добавляю условие IF в свой оператор SQL, возникает ошибка.

1 Ответ

1 голос
/ 05 октября 2019

Ваш запрос неверный синтаксис MySQL. Вам нужно просто выполнить оператор UPDATE, а затем проверить, была ли затронута запись, используя метод node-js 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');
});
...