多个查询的数据库事务

时间:2017-04-26 12:45:39

标签: mysql transactions

每当我有一个插入/更新的多个查询时,我就会尝试新的东西。我就此使用数据库事务。

$this->transaction->beginTransaction();

try {

    $trucker_user->update([
        'username'       => $request->getParam('username'),
        'first_name'     => $request->getParam('first_name'),
        'middle_name'    => $request->getParam('middle_name'),
        'last_name'      => $request->getParam('last_name'),
        'contact_number' => $request->getParam('contact_number'),
        'email'          => $request->getParam('email'),
        'status'         => ($trucker_id) ? 1 : $request->getParam('status')
    ]);

    if ($trucker_id === false) {
        $trucker_user->userTrucker()->update([
            'trucker_id' => $request->getParam('trucker_id')
        ]);
    }

    $this->transaction->commit();
} catch(\Exception $e) {
    $this->transaction->rollBack();
    throw $e;
}

所以问题是,当我有多个查询插入/更新时,这是一个好习惯吗?我将使用数据库事务吗?

我知道,当发生不良事件时会进行回滚,这是一个好主意。但是每当我使用它时,总是在多个查询中并不是有点过分了吗?

1 个答案:

答案 0 :(得分:1)

交易是一种旨在保证一致性的工具。如果第二个更新/插入操作在第二个失败时回滚,则需要进行事务处理。

在您的示例中,您更新了trucker_user个字段,然后在某些情况下,您还会更新其id。您应该向自己提出的问题是"如果trucker_user更新失败,我是否要回滚所有id次更新?"

答案可能是肯定的,因为您必须保持两个操作之间的一致性,或者因为,如果第二个操作失败,您必须重试它,并且再次执行所有操作比查找进程被中断的位置更容易(所以你可以从那里开始。)