SQL会删除在同一事务期间创建的列吗?

时间:2018-09-01 16:54:30

标签: mysql eloquent transactions

我正在使用事务对数据库进行更改,这样,如果更改期间发生任何故障,我可以回滚而不会造成任何损害。

但是,由于我基于将数据库置于最终状态的查询列表来运行我的查询(每次我需要进行更改时,我只需向列表中添加新规则),当我尝试执行以下操作时,它就会失败删除在同一事务期间添加的列。

示例:

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蓝图生成的。

1 个答案:

答案 0 :(得分:1)

MySQL不支持事务中的表更改。来自documentation

  

某些语句无法回滚。通常,这些语句包括数据定义语言(DDL)语句,例如创建或删除数据库的语句,创建,删除或更改表或存储例程的语句。