Дубликация значения в MySQL: как фиксить?

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Error: Duplicate entry '577152902280249346-0-1' for key 'id'
at Packet.asError (F:\Yui\node_modules\mysql2\lib\packets\packet.js:712:17)
at Query.execute (F:\Yui\node_modules\mysql2\lib\commands\command.js:28:26)
at Connection.handlePacket (F:\Yui\node_modules\mysql2\lib\connection.js:417:32)
at PacketParser.Connection.packetParser.p [as onPacket] (F:\Yui\node_modules\mysql2\lib\connection.js:75:12)
at PacketParser.executeStart (F:\Yui\node_modules\mysql2\lib\packet_parser.js:75:16)
at Socket.Connection.stream.on.data (F:\Yui\node_modules\mysql2\lib\connection.js:82:25)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
Emitted 'error' event at:
at Query.execute (F:\Yui\node_modules\mysql2\lib\commands\command.js:33:14)
at Connection.handlePacket (F:\Yui\node_modules\mysql2\lib\connection.js:417:32)
[... lines matching original stack trace ...]
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

JavaScript:
client.on('message', message => {
 
    connection.promise().query(`SELECT * FROM lvls WHERE id = '${message.author.id}'`, (err, rows) => {
        if(err){
            console.error(err);
        }
        try {
            if (!rows[0]) {
                return connection.query(`INSERT INTO lvls (id, xp, lvl) VALUES ('${message.author.id}', '0', '1')`)
            }else{
                return connection.query(`UPDATE lvls SET xp = ${rows[0].xp + 5} WHERE id = '${message.author.id}'`);
            }
        }catch(err){
            console.error(err);
        }
    })
});
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
Пересмотрите свой код. У Вас запись в базе уже есть с таким идентификатором автора.
Скорее всего с результатами запроса надо работать иначе. Сказать сложно, не видя даже либы.
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Пересмотрите свой код. У Вас запись в базе уже есть с таким идентификатором автора.
Скорее всего с результатами запроса надо работать иначе. Сказать сложно, не видя даже либы.
Это discord.js
1584272991361.png
Сообщения автоматически склеены:

Вот ещё рабочая команда, запрос идентичен.

JavaScript:
function daily(message)
{
    message.delete();

    let amount = Math.floor(Math.random() * 49) + 1

    let time = [24];
  
    if(delay.has(message.author.id)) {
        message.channel.send(new Discord.RichEmbed().setColor("f80000").setDescription(`**${message.author.username}**, вы сможете использовать команду через ${time} часа!`))
    } else {
        connection.promise().query(`SELECT * FROM moneys WHERE id = '${message.author.id}'`, (err, rows) => {
            if(err){
                console.error(err);
            }
            try {
                if (!rows[0]) {
                    return connection.query(`INSERT INTO moneys (id, money) VALUES ('${message.author.id}','${amount}')`)
                }else{
                    return connection.query(`UPDATE moneys SET money = ${rows[0].money + amount} WHERE id = '${message.author.id}'`);
                }
            }catch(err){
                console.error(err);
            }
        })
        let daily = new Discord.RichEmbed()

        .setTitle("Юики получены!")
        .setColor("f80000")
        .setDescription(`${message.author}, ваше количество полученых Юиков: **${amount}**`)
        .setTimestamp();

        message.channel.send(daily).then(msg => {msg.delete(5000)});

        delay.add(message.author.id);
        setTimeout(() => {delay.delete(message.author.id)}, time ^ 1440 * 3600)
    }
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
Я про MySQL библиотеку.
И что за, кхм, долбанутый ключ на таблице такой висит, что аж охватывает все три колонки из трёх? Он действительно должен их полностью покрывать?
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Сверху Снизу