gpt4 book ai didi

mysql - 部分提交 MySQL 事务?

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

我想知道是否有办法部分提交事务。我在 C# 中有一个长时间运行的事务,当两个用户并行运行这个事务时,数据是相互依赖的,即使在事务中也应该向他们显示。例如说我有一个包含这 3 列的表

用户名 |左 child |右 child

我正在制作一个二叉树,每当一个新用户被添加到数据库中时,他们就会在树中的某个地方结束。但是我在一个事务中运行所有的插入和更新,所以即使有一个错误,整个事务都可以回滚并且树的结构不会受到干扰。但问题是当两个用户同时使用我的网络应用程序时。假设用户名“jackie_”此时没有任何 child 。两个新用户“king_”和“robbo”同时进入,事务正在为他们两个运行。由于为一个用户运行的事务的结果在实际数据库中对另一个用户不可见,他们都认为'jackie_'的 left_child 尚未设置,因此他们都将 left_child 更新为他们自己的用户名.在交易过程中,因为他们都更新成功,所以他们都提交了交易。现在我有两个用户,但实际上只有一个用户成功进入了树,树的结构被完全打乱了。

所以我需要的是即使在“部分”期间也能够提交一项事务。因此,如果“robbo”首先设置了“jackie_”的 left_child,事务会将更改实现到数据库中,因此当“king_”尝试更新同一行时,他不能。但是,如果在此过程中,如果“robbo”出现其他问题,我仍然希望能够回滚整个事务。任何其他更实用的解决方案也将受到赞赏。

对于我正在运行的所有查询,这是我在事务中执行的方式

        string insertTreesQuery = "INSERT INTO tree (username) VALUES('king_')";
MySqlCommand insertTreesQueryCmd = new MySqlCommand(insertTreesQuery , con);
insertTreesQueryCmd.Transaction = sqlTrans;
insertTreesQueryCmd.ExecuteNonQuery();

sqlTrans 是我在执行所有 MySqlCommand 对象之前使用的事务

最佳答案

你问的是不可能的。您不能“部分”提交事务。我假设您的示例已大大简化,因为您提到交易非常大。在这种情况下,最好将其拆分成可以独立提交的较小的部分,从而减少发生冲突的可能性。

关于mysql - 部分提交 MySQL 事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655642/

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