在交易期间,我能否使用更新后(但尚未提交)的值?
During a transaction, am I able to use the updated (but not yet committed) values?
我很可能把这个复杂化了。我对 MySQL 相当有信心,但以前从未使用过事务。我知道这个概念是 begin()
,在失败时做一些事情,commit()
或 rollback()
,我很确定我可以轻松地构建它。
我想知道的是在交易期间我想更新 table 然后在同一交易期间在另一个查询中使用更新后的值。大纲如下:
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 块中更改可能失败的所有方法都会调用此方法
所以让我提供一个工作(简化)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)
.
整个 t运行saction 在提交之前按照模拟事件的顺序工作,因此 "applies" 更改在 "actually applying" 更改之前。真的很难解释更多,所以我希望这能回答我自己的问题。
我很可能把这个复杂化了。我对 MySQL 相当有信心,但以前从未使用过事务。我知道这个概念是 begin()
,在失败时做一些事情,commit()
或 rollback()
,我很确定我可以轻松地构建它。
我想知道的是在交易期间我想更新 table 然后在同一交易期间在另一个查询中使用更新后的值。大纲如下:
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 块中更改可能失败的所有方法都会调用此方法
所以让我提供一个工作(简化)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)
.
整个 t运行saction 在提交之前按照模拟事件的顺序工作,因此 "applies" 更改在 "actually applying" 更改之前。真的很难解释更多,所以我希望这能回答我自己的问题。