gpt4 book ai didi

mysql - 在交易期间,我能否使用更新后(但尚未提交)的值?

转载 作者:行者123 更新时间:2023-12-05 06:15:58 24 4
gpt4 key购买 nike

我很可能把这个复杂化了。我对 MySQL 相当有信心,但以前从未使用过事务。我知道这个概念是 begin(),做一些事情,commit()rollback() 失败,我很确定我可以轻松构建。

我想知道的是,在一个事务中,我想更新一个表,然后在同一个事务中的另一个查询中使用更新后的值。这是一个大纲:

begin()
INSERT
SELECT FROM INSERT
UPDATE BASED ON SELECT
commit()

显然我已经精简了这里的代码,这本身没有任何意义。在我深入研究事务并发现它不起作用之前,我想知道这个概念是否有效。

我的实际交易将大 5 倍左右,其中一部分依赖于上述未完成交易的其他部分。

我正在使用 Laravel,所以我的代码使用 DB::beginTransaction() DB::commit()DB::rollback() 如果这对问题有任何影响。

最佳答案

所以,简单的答案是肯定的。

我对我一直在开发的代码进行了多次测试,这就是状态,至少在我的情况下是这样。

DB::beingTransaction()

现在我们做我们的事情。此处的所有陈述相互关联并按顺序执行。

DB::commit()

只要模拟运行成功,这就会按顺序运行所有语句

DB::rollback()

这会在 try catch block 中的所有更改可能失败的方法上调用

所以让我提供一个工作(简化)的 Laravel 示例来演示基础知识:

public function store(Request $request)
{
DB::beginTransaction();

try
{
if(!$this->setAuthorisation($request))
throw new Exception('Failed to set authorisation');

DB::commit();
return response()->json(['status' => 'OK'], 200);
}
catch (Exception $exception)
{
DB::rollBack();
return response()->json(['status' => 'Failed', 'error'=>$exception->getMessage()], 500);
}
}

现在从这里我们可以访问在 setAuthorisation() 方法中所做的更改,比如在 getAuthorisation() 方法中,然后应用来自 $data 的数据= getAuthorisation() 到另一组代码,例如 setData($data)

整个事务在提交之前按照模拟事件的顺序工作,因此它在“实际应用”更改之前“应用”更改。真的很难解释更多,所以我希望这能回答我自己的问题。

关于mysql - 在交易期间,我能否使用更新后(但尚未提交)的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62284143/

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