红薯不甜 2024-04-08 11:04 采纳率: 0%
浏览 16

Sequelize 插入数据的时候没有自动自增id?

Sequelize 插入数据的时候没有自动自增id?

表结构:

{
    id: { type: DataTypes.INTEGER.UNSIGNED, autoIncrement: true, primaryKey: true, allowNull: false },
    enid: { type: DataTypes.STRING(100), unique: true, allowNull: false },
    name: { type: DataTypes.STRING(100), unique: true, allowNull: false },
    update_time: { type: DataTypes.DATE, defaultValue: DataTypes.NOW, allowNull: false },
    index: { type: DataTypes.TINYINT.UNSIGNED, defaultValue: 0, allowNull: false },
    pid: { type: DataTypes.INTEGER.UNSIGNED, allowNull: true },
    logo: { type: DataTypes.STRING(200), allowNull: true },
    view: { type: DataTypes.INTEGER.UNSIGNED, defaultValue: 0, allowNull: false },
    intro: { type: DataTypes.STRING(1000), allowNull: false },
}

同步到数据库后:

img


第一次插入数据正常:

img


img


插入第二条数据就会报错:
(数据: { enid: 'ddfffff', name: 'Ddfffff', index: 7, pid: null, intro: 'aaaaaaaaaaaaaaaaa' })

img


大家帮忙看看是哪里的问题??
第二次插入数据的时候如果添加id: 1,就能插入成功,否则失败!

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-08 11:04
    关注

    引自免费微信小程序:皆我百晓生

    首先,我理解您在询问如何解决 Sequelize 插入数据时遇到的 issue。这个问题主要涉及到两个部分:数据库同步以及数据插入。

    1. 数据库同步:
    Sequelize.sync({
        up: true,
        down: true,
        force: true,
    }).then(() => console.log('Database synchronization complete!'))
    .catch(err => console.error('Error occurred while synchronizing the database:', err));
    

    这个方法主要用于更新数据库的结构,它会尝试自动地更新所有的表格。如果您想强制执行同步操作,可以使用 force 参数。但是需要注意的是,这种方法可能会导致数据丢失。

    1. 数据插入:

    这是一个更复杂的问题,涉及到多行的插入语句和错误处理。为了简化这个问题,我们可以在数据库插入之前对所有可能的数据进行验证。例如:

    if (!['id', 'enid', 'name', 'update_time', 'index', 'pid', 'logo', 'view', 'intro'].includes(dbParams.id)) {
        console.error('Invalid ID provided!');
        return;
    }
    
    if (!['id', 'enid', 'name', 'update_time', 'index', 'pid', 'logo', 'view', 'intro'].includes(dbParams.enid)) {
        console.error('Invalid ENID provided!');
        return;
    }
    
    if (!['id', 'enid', 'name', 'update_time', 'index', 'pid', 'logo', 'view', 'intro'].includes(dbParams.name)) {
        console.error('Invalid NAME provided!');
        return;
    }
    
    // ... other validation checks
    
    if (!dbParams.enid || !dbParams.name || !dbParams.updateTime || !dbParams.index || !dbParams.pid || !dbParams.logo || !dbParams.view || !dbParams.intro) {
        console.error('Invalid data provided!');
        return;
    }
    

    这个方法会检查数据库参数中的每个字段是否为空。如果不为空,那么就可以将这些字段添加到结果集中。

    同时,对于插入的数据,您需要确保 id、enid、name、update_time、index、pid 和 logo 等字段都已经被正确设置并且是唯一的。

    最后,如果你正在使用 Node.js 和 Sequelize 进行开发,你应该已经对这两个工具有了一些基本的理解。如果有任何疑问或者需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月8日

悬赏问题

  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?