Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL是否删除在同一事务中创建的列?_Mysql_Eloquent_Transactions - Fatal编程技术网

Mysql SQL是否删除在同一事务中创建的列?

Mysql SQL是否删除在同一事务中创建的列?,mysql,eloquent,transactions,Mysql,Eloquent,Transactions,我正在使用一个事务对我的数据库进行更改,这样,如果更改过程中出现任何故障,我可以回滚,而不会造成任何伤害 但是,由于我基于一个查询列表运行查询,该列表将数据库置于其最终状态(每当我需要进行更改时,我只需向列表中添加一个新规则),因此当我尝试删除在同一事务中添加的列时,查询失败 例如: START TRANSACTION; ALTER TABLE "servers" ADD COLUMN "test" INTEGER NOT NULL; ALTER TABLE "servers"

我正在使用一个事务对我的数据库进行更改,这样,如果更改过程中出现任何故障,我可以回滚,而不会造成任何伤害

但是,由于我基于一个查询列表运行查询,该列表将数据库置于其最终状态(每当我需要进行更改时,我只需向列表中添加一个新规则),因此当我尝试删除在同一事务中添加的列时,查询失败

例如:

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

MySQL不支持事务中的表更改。从:

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


添加默认值是否会更改任何内容
ALTER TABLE servers ADD test INTEGER NOT NULL默认值0?@LukaszSzozda不,这没有什么区别,我也不明白为什么会有区别。因为向具有数据且不为NULL的表中添加列将失败。它不会改变任何与Transaction相关的内容,如果使用两个事务如何?在其中添加字段并使用它。然后是另一个你放弃的领域?您甚至可以设置一个
@变量
来检入第二个事务,如
@success