NodeJS 在Sequelize中只更改迁移中的列类型是否会保留其原始约束?

6l7fqoea  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(97)

我正在做一个Express项目,并使用Sequelize作为我的ORM,我定义了以下Sequelize模型:

Field.init({
  type: {
    type: DataTypes.STRING,    
    allowNull: false,
    unique: true,
  }
}, {
  sequelize,   
  underscored: true,
  tableName: "field",
});

假设现在我想限制type列的字符量,并创建如下所示的迁移(async up是这里的焦点):

'use strict';
const { Transaction } = require('sequelize');

module.exports = {
  async up(queryInterface, Sequelize) {
    return queryInterface.sequelize.transaction({
      isolationLevel: Transaction.ISOLATION_LEVELS.SERIALIZABLE,
    }, async t => {
        await queryInterface.changeColumn('field', 'type', {
                type: Sequelize.STRING(400),
                allowNull: false,
            },
            { transaction: t },
        );
    });
  },

  async down(queryInterface, Sequelize) {
    return queryInterface.sequelize.transaction({
      isolationLevel: Transaction.ISOLATION_LEVELS.SERIALIZABLE,
    }, async t => {
        await queryInterface.changeColumn('field', 'type', {
                type: Sequelize.STRING,    
                allowNull: false,
            },
            { transaction: t },
        );
    });
  }
};

uniqueallowNull约束是否会保留在列中?或者这些会被删除,因为在迁移中我只列出了列的新类型?

6qqygrtg

6qqygrtg1#

  • 在Sequelize迁移中,添加新约束不会自动删除旧约束
  • 当您创建新迁移以添加约束时,它将添加指定的约束,而不会影响任何现有约束,除非您在同一迁移或单独迁移中显式删除它们。

相关问题