Laravel使用DB Facade创建表时出现无活跃事务错误原因咨询
导致"There is no active transaction"错误的常见原因
数据库引擎不支持事务
要是你用的是MySQL的MyISAM引擎,它本身不支持事务操作。调用beginTransaction()后数据库并不会真正创建事务,后续执行commit或rollBack时自然会提示没有活跃事务。需要将表引擎切换为InnoDB(或其他支持事务的引擎)。DDL语句触发隐式事务提交
像CREATE TABLE这类DDL语句,在很多数据库(比如MySQL)中会自动触发隐式提交——执行DDL时数据库会自动提交当前活跃的事务。你的代码里,create('Alpha_1')执行后,之前开启的事务已经被数据库自动结束了,后续再调用commit()就会报错。如果create过程中抛出异常,进入catch执行rollBack()时,事务也已经不存在,同样会触发这个错误。连接实例异常
虽然代码中是通过$dbConnection->getSchemaBuilder()获取的构建器,但如果数据库配置存在问题(比如连接超时、配置项错误),可能导致实际使用的连接和你开启事务的连接不是同一个,也会出现事务不存在的情况。未处理的事务残留
如果该数据库连接之前有未提交/回滚的事务残留,可能导致新的beginTransaction()无法正确创建活跃事务,不过这种情况在单独的请求中概率较低。
内容的提问来源于stack exchange,提问作者Archit Gupta
相关产品推荐
相关产品推荐

