我希望在某个列之后通过迁移添加列也将其编入索引(正常的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');
}
};
答案 0 :(得分:29)
您可以在选项中传递after
或before
,以便在指定列之后添加列。
'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;