我正在使用事务对我的数据库进行修改,这样,如果在更改过程中有任何失败,我可以回滚而不会造成任何伤害。
但是,由于我基于将我的数据库置于其最后状态的查询列表来运行我的查询(每当我需要更改时,我只需向列表中添加一个新规则),所以当我尝试删除在同一事务期间添加的列时,它将失败。
示例:
START TRANSACTION;
ALTER TABLE "servers" ADD COLUMN "test" INTEGER NOT NULL;
ALTER TABLE "servers" DROP COLUMN "test";
COMMIT;当我运行这个程序时,我得到了一些类似于
column "test" in the middle of being added, try again later我理解为什么会发生这种情况,因为事务还没有提交,所以列还没有被删除。但是,是否有专门的方法可以将列放在同一个事务中呢?或至少在事务提交后将其排队删除。
我认为值得注意的是,在事务中运行的查询是使用雄辩的ORM蓝图生成的。
发布于 2018-09-02 00:55:07
MySQL不支持事务中的表更改。来自文档
有些语句不能回滚。通常,这些语句包括数据定义语言(,DDL)语句,例如创建或删除数据库的语句、创建、删除或更改表或存储例程的语句。
https://stackoverflow.com/questions/52130330
复制相似问题