输入命令时出现 sql 错误

Posted

技术标签:

【中文标题】输入命令时出现 sql 错误【英文标题】:I have an sql error when i type in a command 【发布时间】:2021-03-02 14:10:13 【问题描述】:

所以我正在尝试为我的机器人进行动态命令处理,但它不起作用。在没有动态命令处理的情况下一切正常。 所以这是我输入命令时遇到的错误!work:

UniqueConstraintError [SequelizeUniqueConstraintError]: Validation error
    at Query.formatError (C:\Users\mmede\Desktop\Discord Bot\node_modules\sequelize\lib\dialects\sqlite\query.js:409:16)
    at Query._handleQueryResponse (C:\Users\mmede\Desktop\Discord Bot\node_modules\sequelize\lib\dialects\sqlite\query.js:72:18)
    at Statement.afterExecute (C:\Users\mmede\Desktop\Discord Bot\node_modules\sequelize\lib\dialects\sqlite\query.js:246:27)
    at Statement.callbackTrampoline (internal/async_hooks.js:129:14) 
  errors: [
    ValidationErrorItem 
      message: 'user_id must be unique',
      type: 'unique violation',
      path: 'user_id',
      value: '485384232131100693',
      origin: 'DB',
      instance: [users],
      validatorKey: 'not_unique',
      validatorName: null,
      validatorArgs: []
    
  ],
  fields: [ 'user_id' ],
  parent: [Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: users.user_id] 
    errno: 19,
    code: 'SQLITE_CONSTRAINT',
    sql: 'INSERT INTO `users` (`user_id`,`balance`) VALUES ($1,$2);'
  ,
  original: [Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: users.user_id] 
    errno: 19,
    code: 'SQLITE_CONSTRAINT',
    sql: 'INSERT INTO `users` (`user_id`,`balance`) VALUES ($1,$2);'
  ,
  sql: 'INSERT INTO `users` (`user_id`,`balance`) VALUES ($1,$2);'

这是我的工作脚本:

const Discord = require('discord.js');
const  Users, CurrencyShop  = require('../dbObjects');
const currency = new Discord.Collection();




Reflect.defineProperty(currency, 'add', 
     //eslint-disable-next-line func-name-matching 
    value: async function add(id, amount) 
        const user = currency.get(id);
        if (user) 
            user.balance += Number(amount);
            return user.save();
         else 
        try 
            const newUser = await Users.create( user_id: id, balance: amount );
            currency.set(id, newUser);
            return newUser;
             catch (err) 
                // print the error details
                console.log(err);
            
        
    ,
);



module.exports = 
    name: 'work',
    description: 'balancas',
    execute(message, async) 

        message.channel.send('You hacked someones computer and you gained 1million vbucks')
        currency.add(message.author.id, 1000000);


    

如果有人愿意帮助我,我将不胜感激。我是 sql 新手,所以如果你能解释我在哪里犯了错误,那就太好了。

【问题讨论】:

错误信息说你正在尝试插入一个已经存在于表中的 user_id 值,这是不允许的 - 'user_id must be unique'。跨度> 【参考方案1】:

问题是您正试图将一个条目(用户)插入到用户表中,其中 user_id 已经存在。

由于 users 表有一个 UNIQUE 约束,该列是该表的主键并且可以有没有重复 user_ids 即没有两个用户可以有相同的 user_id。

如果您想编辑特定用户,请尝试update 命令。

【讨论】:

所以我现在得到这个 AssertionError [ERR_ASSERTION]: Missing where attribute in the options parameter 当我输入而不是 user.create, user.update

以上是关于输入命令时出现 sql 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 SQL 查询中输入 0 到 11 之间的月份时出现 oracle 错误 ORA-01843

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

sql server登录时出现错误233

导入大 sql 转储时出现 PHPMYADMIN 错误

运行 sql 语句时出现 snwochange 错误

执行 INSERT 时出现 SQL 错误:“s”附近的语法不正确 [重复]