module.exports = {
async up(queryInterface, Sequelize) {
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.addColumn(
'Person',
'petName',
{
type: Sequelize.DataTypes.STRING,
},
{ transaction }
);
await queryInterface.addColumn(
'Personasfasfasfasf',
'petAge',
{
type: Sequelize.DataTypes.INTEGER,
},
{transaction}
);
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
},
async down(queryInterface, Sequelize) {
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.removeColumn('Person', 'petName', { transaction });
await queryInterface.removeColumn('Person', 'petAge', { transaction });
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
}
};
我的数据库中有一个Person表。我用的是MySQL数据库。
我引入了一个表名错误,我希望我的迁移回滚,代码流确实去捕捉blow,但在Person Table中创建了petName列。
这是一个从sequelize文档的样本,有人可以帮助我吗?它不适用于交易。
即使我移除transaction.commit();将petName列添加到Person表。
1条答案
按热度按时间jk9hmnmh1#
这是预期的行为,与Sequelize无关,而是MySQL的“限制”。基本上,有些语句是不能回滚的,主要是DDL语句。
摘自MySQL文档:https://dev.mysql.com/doc/refman/8.0/en/cannot-roll-back.html