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

我想通过迁移添加列后,某一列还索引它(正常的mysql索引不唯一索引)。 这是可能的通过sequelize.js通过迁移。 如果是的话,如果没有任何替代品,通过迁移。

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

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

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

你可以在选项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'); } }; 

据我所知,没有办法通过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添加新列,并将其放在您select的列之后:

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