mysql 在事务不工作的情况下序列化迁移

but5z9lq  于 2023-06-04  发布在  Mysql
关注(0)|答案(1)|浏览(333)
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表。

jk9hmnmh

jk9hmnmh1#

这是预期的行为,与Sequelize无关,而是MySQL的“限制”。基本上,有些语句是不能回滚的,主要是DDL语句。
摘自MySQL文档:https://dev.mysql.com/doc/refman/8.0/en/cannot-roll-back.html

相关问题