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

时间:2015-07-29 14:30:17

标签: 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');
  }
};

2 个答案:

答案 0 :(得分:29)

您可以在选项中传递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');
}
};

P.S。 after选项仅受MySQL支持 https://github.com/sequelize/sequelize/blob/master/lib/query-interface.js#L495

答案 1 :(得分:-1)

据我所知,无法通过addColumn函数进行此操作。

但你可以通过原始SQL查询来实现:

ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column;

您可以在以下迁移中运行自定义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;
  }
};

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

ALTER TABLE UserDetails ADD COLUMN user_id VARCHAR(50) AFTER some_column;