MariaDB终端执行UPDATE查询时库存不足如何抛出错误(非存储过程)
解决方案
方案一:利用CHECK约束(推荐)
这种方法无需复杂逻辑,通过表约束自动校验库存合法性,扣减后库存不足时会直接抛出错误,且更新操作不会生效。
- 先给
inventory表添加库存非负的CHECK约束(若表中已存在该约束可跳过此步):
ALTER TABLE inventory ADD CONSTRAINT chk_inventory_quantity CHECK (quantity_in_stock >= 0);
- 执行库存扣减的UPDATE语句:
UPDATE inventory SET quantity_in_stock = quantity_in_stock - 5 WHERE product_id = 101;
当库存不足(扣减后小于0)时,MariaDB会自动抛出错误:
ERROR 3819 (HY000): Check constraint 'chk_inventory_quantity' is violated.
方案二:无约束直接校验并抛错
若不想添加表约束,可通过匿名块实现校验+抛错逻辑,直接在终端执行:
DELIMITER // DO BEGIN IF (SELECT quantity_in_stock FROM inventory WHERE product_id = 101) < 5 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不足,无法执行扣减操作'; ELSE UPDATE inventory SET quantity_in_stock = quantity_in_stock - 5 WHERE product_id = 101; END IF; END // DELIMITER ;
执行后,若库存不足会返回自定义错误信息:
ERROR 1644 (45000): 库存不足,无法执行扣减操作
原查询的问题说明
你之前的SQL存在语法错误:IF函数缺少END IF闭合,且IF是取值函数,只能返回数据值,无法直接嵌入抛错类SQL语句。
内容的提问来源于stack exchange,提问作者Rishabh Gupta
相关产品推荐
相关产品推荐

