gpt4 book ai didi

mysql - 灵活的事务查询不会被回滚

转载 作者:行者123 更新时间:2023-11-29 17:31:36 25 4
gpt4 key购买 nike

在 slick 中发出事务查询的方式 according to docs是在DBIOAction实例上事务性调用。然而,在我的例子中,只有产生错误的操作没有被执行。序列中其他操作引入的更改(发生在失败操作之前而不是之后)将被写入数据库并且不会回滚。

def runTx(db: Database, queries: Iterable[DBIOAction[Int, NoStream, Effect]])(
implicit ec: ExecutionContext
): Future[Try[Iterable[Int]]] = {
val combined: DBIOAction[Iterable[Int], NoStream, Effect] = DBIO.sequence(queries)
val tx: DBIOAction[Try[Iterable[Int]], NoStream, Effect with Effect.Transactional] =
combined.transactionally.asTry
db.run(tx)
}

我想要关联存储在多个表中的传入数据,但必须完全存储或根本不存储。

DBAction 是使用 sql 插值器创建的插入。

尽管单元测试和外部工具的个别操作失败,但我已确认数据正在写入和保留。

slick 3.2.3 与 mysql 5.7.22。

如何保证事务性并在其中一个查询失败时回滚序列的所有查询?

最佳答案

事务不工作的原因是数据库引擎。这与斯利克无关。我一直在使用的表使用 MyISAM 引擎,does not support transactions

将引擎切换到 InnoDB 后,事务按预期工作。

其他人早在我之前就发现了这一点:
https://stackoverflow.com/a/32913817/216021

https://stackoverflow.com/a/8036049/216021

关于mysql - 灵活的事务查询不会被回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com