基于条件的回滚事务

时间:2018-07-08 16:06:07

标签: mysql sql transactions

如果列值小于或等于用户的输入值并提醒用户,我想中止批处理sql查询事务。

发生了什么事

    从用户输入的数量值中减去
  • available_qty值,并在food_menu表中更新该值。
  • 用户的订单记录已插入food_order表中。

这是我的查询:

    foreach($menuData as $item=>$qty)
    {
        if(empty($qty) || $qty == '0')
            continue;
        $sqlArray[] = "INSERT INTO food_order 
        (user_id, item_id, quantity, order_type, updated_on, updated_by, created_by, created_on)
        VALUES ($uid, $item, $qty, '$menu_type', NOW(), $uid, $uid, NOW())";
        $sqlArray[] = "UPDATE food_menu SET available_qty = IF($qty >= available_qty, available_qty - $qty, available_qty) WHERE item_id = $item AND type = '$menu_type' AND DATE(updated_on) = CURRENT_DATE";
    }
    return (boolean) $this->db->exec($sqlArray);
  1. 如果$qty的值大于available_qty字段的值,我想中止$sqlArray[]中的整个交易系列。

我可以在查询本身中这样做吗?

1 个答案:

答案 0 :(得分:1)

我认为一种更好的方法是在插入和更新语句开始之前检查剩余数量中的可用数量。但是为了提供信息,您可以尝试以下操作:

在food_menu表上创建更新前触发器。在触发器中,检查可用数量是否为负,这意味着订单数量大于可用数量,然后使用SIGNAL语句引发错误,您必须将其捕获在代码中并进行回滚并显示适当的消息给用户。