我想知道是否有办法部分提交事务。我在C#中有一个长时间运行的事务,并且当两个用户并行运行这个事务时,这些数据是相互依赖的,即使在事务中也应该显示给他们。例如说我有这3列的表格部分提交MySQL事务?
用户名| left_child | right_child
我正在制作一棵二叉树,每当一个新用户被添加到数据库中时,它们就会到达树中的某个地方。但是我在一个事务中运行了所有的插入和更新操作,所以如果有一个错误,整个事务可以被回滚,树的结构也不会受到干扰。但问题是两个用户同时使用我的Web应用程序的时间。 说用户名'jackie_'在一分钟内没有任何孩子。两个新用户'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
对象的交易执行它们
不,你不能这样做。你必须找出解决这个问题的另一种方法。 –