基于条件的事务回滚

mrfwxfqh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(245)

如果列值小于或等于用户的输入值,我想中止批处理sql查询事务并通知用户。
下面是发生的情况:
可用数量值从用户输入的数量值中减去,并在食物菜单表中更新该值。
用户的订单记录被插入到食品订单表中。
我的问题是:

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);

如果 $qty 值大于 available_qty 字段值,我要中止中的整个系列事务 $sqlArray[] .
我可以在查询本身中这样做吗?

ztigrdn8

ztigrdn81#

我认为一个更好的方法是在insert和update语句开始之前检查可用数量和剩余数量。但为了获取信息,您可以尝试以下方法:
在食物菜单表上创建更新前触发器。在触发检查中,它的可用数量为负数,表示订单数量大于可用数量,然后使用 SIGNAL 语句引发一个错误,您必须在代码中捕获该错误并执行回滚,然后向用户显示相应的消息。

相关问题