迁移在指定的列和索引列之后添加列

Sud*_*esh 7 mysql node.js sequelize.js

我希望在某个列之后通过迁移添加列也将其编入索引(正常的mysql索引不是唯一索引).这可以通过sequelize.js通过迁移实现.如果是,如何以及如果没有任何替代方案通过迁移.

我们可以在续集迁移中执行自定义查询吗?

以下是我现有的迁移文件.

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.addColumn('UserDetails', 'user_id', {
      type: Sequelize.INTEGER,
    });
  },

  down: function (queryInterface, Sequelize) {
    return queryInterface.removeColumn('UserDetails', 'user_id');
  }
};
Run Code Online (Sandbox Code Playgroud)

Viv*_*edi 30

您可以传递afterbefore在选项中添加一些指定列之后的列.

'use strict';

module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.addColumn('UserDetails', 'user_id', {
  type: Sequelize.INTEGER,
  after: "some_column"
});
},

down: function (queryInterface, Sequelize) {
return queryInterface.removeColumn('UserDetails', 'user_id');
}
};
Run Code Online (Sandbox Code Playgroud)

  • 这个版本的Sequelize是什么版本的?我在CLI版本3.9.1,它似乎没有工作. (5认同)
  • 这应该被接受为正确的答案. (2认同)

wie*_*elo 0

据我所知,没有办法通过addColumn函数来​​做到这一点。

但你可以通过原始 SQL 查询来完成:

ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column;
Run Code Online (Sandbox Code Playgroud)

您可以在迁移中运行自定义 SQL 查询,如下所示:

module.exports = {
  up: function(queryInterface, Sequelize) {
    return queryInterface.sequelize.query("ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column;")
  },
  down: function(queryInterface, Sequelize) {
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

由于您已经在使用自定义 SQL,因此您可以通过原始 SQL 添加新列并将其放在您选择的列之后:

ALTER TABLE UserDetails ADD COLUMN user_id VARCHAR(50) AFTER some_column;
Run Code Online (Sandbox Code Playgroud)