You need to enable JavaScript to run this app. Sequelize搭配MySQL设置UUID主键报错:字段id无默认值如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize搭配MySQL设置UUID主键报错:字段id无默认值如何解决

问题排查与解决方案
  • 核心错误:迁移文件表名不匹配
    你提供的迁移文件up阶段创建的是Admins表,而非你需要的Users表,down阶段删除的却是Users表,这就导致你执行迁移后,数据库中不存在结构符合预期的Users表。你操作Users模型时对应的实际表要么是旧版本创建的(id字段未设置UUID默认值),要么结构完全不对,这是触发Field 'id' doesn't have a default value报错的最主要原因。

修正方案:将迁移文件up函数中createTable的第一个参数改为'Users',修正后的迁移代码如下:

'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    // 此处将Admins修改为Users
    await queryInterface.createTable('Users', {
      id: {
        type: Sequelize.UUID,
        defaultValue: Sequelize.UUIDV4,
        allowNull: false,
        primaryKey: true
      },
      user_name: {
        type: Sequelize.STRING,
        allowNull: false
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};
  • 操作步骤错误:未重新执行迁移生效配置
    如果你之前已经执行过错误的迁移,直接修改迁移文件不会自动更新数据库表结构,需要先回滚错误迁移,再重新执行新的迁移:
  1. 回滚上一次迁移:npx sequelize-cli db:migrate:undo
  2. 执行修正后的迁移:npx sequelize-cli db:migrate
  • 其他可能的问题:seed插入方式不符合预期
    如果你编写的seed文件是直接执行原生SQL插入数据,没有调用Sequelize模型的create方法,需要手动为id字段生成UUID值,因为原生SQL不会触发Sequelize模型层面的默认值生成逻辑。如果是通过模型插入,你当前模型中配置的defaultValue: DataTypes.UUIDV4会自动生成合法UUID,不需要手动传id参数。

内容的提问来源于stack exchange,提问作者mochacookies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 09:15:06